题目描述如下:
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.
解答如下:
一开始想直接用递归写的,然后就超时了。后来更改了一下:
class Solution {
public void helper(int[] nums, int S, int[] arr, int sum, int start) {
if (start == nums.length) {
if (sum == S) {
arr[0]++;
}
return;
}
helper(nums, S, arr, sum - nums[start], start + 1);
helper(nums, S, arr, sum + nums[start], start + 1);
}
public int findTargetSumWays(int[] nums, int S) {
int[] arr = new int[1];
helper(nums, S, arr, 0, 0);
return arr[0];
}
}