1.思想方法
2.代码
java
复制代码
class Solution {
public int findTargetSumWays(int[] nums, int target) {
int sum = 0;
for(int num : nums)
sum += num;
if(sum < Math.abs(target) || (target+sum)%2 != 0)
return 0;
int x = (target+sum) / 2,n = nums.length;
//基于滚动数组的方法
int[] dp = new int[x+1];
dp[0] = 1;
for(int i = 0;i < n;i++){
for(int j = x;j >= nums[i];j--)
dp[j] = dp[j] + dp[j - nums[i]];
}
return dp[x];
//基于二维数组的方法
// int[][] dp = new int[n+1][x+1];
// dp[0][0] = 1;
// for(int i = 1;i <= n;i++){
// for(int j = 0;j <= x;j++){
// if(j < nums[i-1])
// dp[i][j] = dp[i-1][j];
// else
// dp[i][j] = dp[i-1][j] + dp[i-1][j - nums[i-1]];
// }
// }
// return dp[n][x];
}
}