思路:
0-1背包问题,回溯(深度优先遍历)
代码:
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 sum){
//index==nums.length表示长度越界了
//只判断结果sum即可,是上一步的结果,这里不会变了
if(index==nums.length){
if(sum==target){
count++;
}
}
else{
//两种情况
dfs(nums,target,index+1,sum+nums[index]);
dfs(nums,target,index+1,sum-nums[index]);
}
}
}
分解:
1)剪枝:
当index==nums.length时,表示长度越界了
只判断结果sum即可,是上一步的结果,这里不会变了
2)若index还没遍历完nums.length,下面就有2个选中,-或+
dfs(nums,target,index+1,sum+nums[index]);
dfs(nums,target,index+1,sum-nums[index]);