rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

use std::collections::HashMap;

impl Solution {
    fn find_target_sum_ways(nums: Vec<i32>, s: i32) -> i32 {
        let n = nums.len();
        let mut memo: HashMap<(usize, i32), i32> = HashMap::new();
        Self::dp(n, s, &mut memo, &nums, n)
    }

    fn dp(
        end: usize,
        sum: i32,
        memo: &mut HashMap<(usize, i32), i32>,
        nums: &[i32],
        n: usize,
    ) -> i32 {
        if end == 0 {
            if sum == 0 {
                1
            } else {
                0
            }
        } else {
            if let Some(&res) = memo.get(&(end, sum)) {
                return res;
            }
            let a = Self::dp(end - 1, sum + nums[end - 1], memo, nums, n);
            let b = Self::dp(end - 1, sum - nums[end - 1], memo, nums, n);
            let res = a + b;
            memo.insert((end, sum), res);
            res
        }
    }
}

#[test]
fn test() {
    let nums = vec![1, 1, 1, 1, 1];
    let s = 3;
    let res = 5;
    assert_eq!(Solution::find_target_sum_ways(nums, s), res);
}