zoukankan      html  css  js  c++  java
  • 【数据结构】目标和 Target Sum

    目标和 Target Sum

    一个整数组nums和一个整数target,向nums中的每个数字前添加 +或-,形成的表达式,计算结果等于target,计算所有满足的表达式的数目。

    in:nums = [1,1,1,1,1], target = 3
    out:5
    
    

    思路

    使用DFS,每一次状态扩展有2个选择。影响结果的是dfs的参数第i个数,和余下的target。直到dfs递归到最后的数组index,此时target等于0 说明找到一个方案,否则就返回0.

    可以在dfs过程中采用记忆化处理【HashMap】,减少分支重复计。

    HashMap<PII,Integer> map = new HashMap<>();
    
        public class PII {
             
           public int i;
            public int tar;
            PII(int x,int t){
                this.i = x;
                this.tar = t;
            }
    
            @Override
            public boolean equals(Object o) {
                 
                PII pii = (PII) o;
                return i == pii.i &&
                        tar == pii.tar;
            }
    
            @Override
            public int hashCode() {
                return Objects.hash(i, tar);
            }
        }
    
        public int dfs(int i,int target,int[] nums){
            if(i==nums.length){
                return target==0?1:0;
            }
            PII pii= new PII(i,target);
            if(map.containsKey(pii)){           
                return map.get(pii);
            }
            int ans =0;
            ans += dfs(i+1,target-nums[i],nums);
            ans += dfs(i+1,target+nums[i],nums);
            map.put(pii,ans);
            return ans;
        }
    
        public int findTargetSumWays(int[] nums, int target) {
            return dfs(0,target,nums);
        }
    

    Tag

    DFS

  • 相关阅读:
    mvc:三
    mvc:二
    Linq分组,linq方法分组
    Linq 中按照多个值进行分组(GroupBy)
    Photoshop 字体
    报表Reporting S而vice是 错误的解决
    1*书籍装帧
    photoshop 魔术橡皮擦
    Photoshop 钢笔 双窗口显示
    数字格式化
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/15377355.html
Copyright © 2011-2022 走看看