美文网首页
LeetCode 第494题:目标和

LeetCode 第494题:目标和

作者: 放开那个BUG | 来源:发表于2020-11-21 14:36 被阅读0次

    1、前言

    题目描述

    2、思路

    此题类似于二叉树搜索,写法比较简单。因为后面需要 sum 有复数,所以用数组作为 memo 只能继续非负整数部分,整数部分被忽略。如果比较在意时间,那么用 hashmap 来做(字符串拼接不也耗时吗?),如果不是,那么直接用数组记录即可。

    3、代码

    public class Q494_FindTargetSumWays {
    
        public int findTargetSumWays(int[] nums, int target) {
            if(nums == null || nums.length == 0){
                return 0;
            }
    
            Map<String, Integer> memo = new HashMap<>();
            return dfs(nums, target, 0, 0, memo);
        }
    
        private int dfs(int[] nums, int target, int sum, int i, Map<String, Integer> memo) {
            if(i == nums.length){
                return sum == target ? 1 : 0;
            }
    
            String key = i + "_" + sum;
            if(memo.containsKey(key)){
                memo.get(key);
            }
    
            int res = 0;
            res += dfs(nums, target, sum + nums[i], i + 1, memo);
            res += dfs(nums, target, sum - nums[i], i + 1, memo);
    
            memo.put(key, res);
    
            return res;
        }
    
        public static void main(String[] args) {
            System.out.println(new Q494_FindTargetSumWays().findTargetSumWays(new int[]{1}, 1));
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 第494题:目标和

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