Java教程

494. 目标和

本文主要是介绍494. 目标和,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

回溯(耗时大):

class Solution {
    int ans=0;
    public int findTargetSumWays(int[] nums, int target) {
   dfs(nums,0,target,0);
   return ans;
    }
    void dfs(int[] nums,int pos,int target,int sum){
        if(pos==nums.length){
             if(target==sum)
             ans++;
            return;
        }
        
        sum+=nums[pos];
        
        dfs(nums,pos+1,target,sum);
        sum-=2*nums[pos];
        dfs(nums,pos+1,target,sum);


    }
}

记忆化递归:

class Solution {
    //由递归转化成记忆化递归:
    //在考虑加入「记忆化」时,我们只需要将 DFS 方法签名中的【可变】参数作为维度,DFS 方法中的返回值作为存储值即可。
    //可用数组或者map作为记忆容器
    HashMap<String,Integer> map=new HashMap<>();
    public int findTargetSumWays(int[] nums, int target) {
         
         return dfs(nums,target,0,0);

    }
    int  dfs(int[] nums,int target,int pos,int sum){
          if(pos==nums.length){
              if(sum==target)
                   return 1;
            return 0;
          }
         String str=pos+"_"+sum;
         if(map.containsKey(str))return map.get(str);
         int res=dfs(nums,target,pos+1,sum+nums[pos])+dfs(nums,target,pos+1,sum-nums[pos]);
         map.put(str,res);
         return res;


    }
}

这篇关于494. 目标和的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!