rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn is_additive_number(num: String) -> bool {
        let n = num.len();
        let mut res = false;
        let mut cur: Vec<u64> = vec![];
        Self::dfs(0, &mut cur, &mut res, &num[0..n], n);
        res
    }

    fn dfs(start: usize, cur: &mut Vec<u64>, valid: &mut bool, s: &str, n: usize) {
        if start == n {
            if cur.len() >= 3 {
                *valid = true;
            }
        } else {
            for i in start + 1..=n {
                if &s[start..=start] == "0" && i - start > 1 {
                    return;
                }
                if let Ok(x) = s[start..i].parse::<u64>() {
                    let k = cur.len();
                    if k < 2 {
                        cur.push(x);
                        Self::dfs(i, cur, valid, s, n);
                        cur.pop();
                    } else {
                        if cur[k - 1] + cur[k - 2] == x {
                            cur.push(x);
                            Self::dfs(i, cur, valid, s, n);
                            cur.pop();
                        }
                    }
                }
            }
        }
    }
}

#[test]
fn test() {
    let num = "112358".to_string();
    let res = true;
    assert_eq!(Solution::is_additive_number(num), res);
    let num = "199100199".to_string();
    let res = true;
    assert_eq!(Solution::is_additive_number(num), res);
    let num = "101".to_string();
    let res = true;
    assert_eq!(Solution::is_additive_number(num), res);
    let num = "12012122436".to_string();
    let res = true;
    assert_eq!(Solution::is_additive_number(num), res);
    let num = "121474836472147483648".to_string();
    let res = true;
    assert_eq!(Solution::is_additive_number(num), res);
}