Target Sum 08/06
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.
The length of the given array is positive and will not exceed
20
.The sum of elements in the given array will not exceed
1000
.Your output answer is guaranteed to be fitted in a
32-bit
integer.
Have you met this question in a real interview? Yes
Example
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
public class Solution {
/**
* @param nums: the given array
* @param s: the given target
* @return: the number of ways to assign symbols to make sum of integers equal to target S
*/
public int findTargetSumWays(int[] nums, int s) {
// Write your code here
return dfs(s,0,nums,0,0);
}
public int dfs(int s, int index,int[] num, int currentSum,int count){
if(index == num.length){
if(s == currentSum){
count++;
}
return count ;
}
return dfs(s,index+1,num,currentSum+num[index],count) + dfs(s,index+1,num,currentSum-num[index],count);
}
}
Last updated