题目描述
输入输出样例
输入: nums: [1, 1, 1, 1, 1], S: 3
输出: 5
解释:
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
一共有5种方法让最终目标和为3。
题解
使用递归遍历所有可能出现的情况
class Solution {
int count = 0;
public int findTargetSumWays(int[] nums, int S) {
helper(nums, S, 0);
return count;
}
public void helper(int[] nums, int S, int index){
// 如果遍历到最后一个,并且S=0,说明可以得到目标
if(index == nums.length){
if(S == 0)
count++;
return;
}
// 有两种情况 +,-
helper(nums, S-nums[index], index+1);
helper(nums, S+nums[index], index+1);
}
}
——有更好的解法…