美文网首页
494. 目标和

494. 目标和

作者: 名字是乱打的 | 来源:发表于2021-12-27 02:11 被阅读0次

一题目:

二 思路:

  • 第一种思路:
    递归,每一位都可能为正或者为负,我们只要把买个位的情况考虑进去即可;
  • 第二种思路:
    优化
    不难发现,在 DFS 的函数签名中只有「数值下标 index」和「当前结算结果 currSum」为可变参数,考虑将其作为记忆化容器的两个维度,返回值作为记忆化容器的记录值。
    由于 currSum 存在负权值,为了方便,我们这里不设计成静态数组,而是使用「哈希表」进行记录。

三 代码:

第一种思路:

class Solution {

    int count=0;
    public int findTargetSumWays(int[] nums, int target) {
        dfs(nums,target,0,0);
        return count;
    }

    private void dfs(int[] nums, int target, int index, int currSum) {
        if (index==nums.length){
            count+=currSum==target?1:0;
            return;
        }
        //前面一个数字是正的、负的
        dfs(nums,target,index+1,currSum+nums[index]);
        dfs(nums,target,index+1,currSum-nums[index]);
    }
}

优化:

class Solution {

    HashMap<String,Integer> cache=new HashMap<>();

    public int findTargetSumWays(int[] nums, int target) {
        return dfs(nums,target,0,0);
    }

    private int dfs(int[] nums, int target, int index, int currSum) {
        String key=index+"_"+currSum;

        if (cache.containsKey(key)){
            return cache.get(key);
        }
        //前面一个数字是正的、负的
        if (index==nums.length){
            //最后结果判断是否可以达成目标,然后进行回溯
            cache.put(key,currSum==target?1:0);
            return cache.get(key);
        }

        int incr=dfs(nums,target,index+1,currSum+nums[index]);
        int decr=dfs(nums,target,index+1,currSum-nums[index]);
        cache.put(key,incr+decr);
        return cache.get(key);
    }
}
``

相关文章

  • 494. 目标和

    解法

  • 494. 目标和

    一题目: 二 思路: 第一种思路:递归,每一位都可能为正或者为负,我们只要把买个位的情况考虑进去即可; 第二种思路...

  • LeetCode 494. 目标和

    每天一道DP防止抑郁 题目描述: 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你...

  • LeetCode 494. 目标和

    题目 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于...

  • [leetcode]494. 目标和

    非常好的学习资料 题目 链接 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两...

  • LeetCode 494. 目标和

    题目 给你一个整数数组 nums 和一个整数 target。向数组中的每个整数前添加 '+' 或 '-' ,然后串...

  • Unsolved - Apr 2018

    494. Target Sum 214. Shortest Palindrome

  • LeetCode 494. Target Sum

    10-9 LeetCode 494. Target Sum Target Sum Description You ...

  • 494. 月饼

    月饼银盘大,福到中秋节全家享一块,甘甜味无别

  • 494.黑与白

    死了就是死了,能力不足,就不要被复仇的火焰蒙蔽双眼,一味的执着于复仇,只会徒增伤亡。黑与白,离开光的影不能存活,离...

网友评论

      本文标题:494. 目标和

      本文链接:https://www.haomeiwen.com/subject/jlieqrtx.html