You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol.
Find out how many ways to assign symbols to make sum of integers equal to target S.
Example 1:
Input: nums is [1, 1, 1, 1, 1], S is 3.
Output: 5
Explanation:
-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
There are 5 ways to assign symbols to make the sum of nums be target 3.
dfs列举所有可能性,判断结果是否符合给定的值
class Solution {
public:
int findTargetSumWays(vector<int>& nums, int S) {
return dfs(nums,S,0,0);
}
int dfs(vector<int>& nums,int target,int cur_length,int cur_sum){
if(cur_length == nums.size()){
if(cur_sum == target)
return 1;
return 0;
}
return dfs(nums,target,cur_length + 1,cur_sum + nums[cur_length]) + dfs(nums,target,cur_length + 1,cur_sum - nums[cur_length]);
}
};