返回dp[n][a]
class Solution {
public int findTargetSumWays(int[] nums, int target) {
int sum = 0;
int n = nums.length;
for(int i = 0; i < n; i++) sum += nums[i];
int a = (sum+target)/2;//凑出的容积
//处理边界条件
if(a < 0 || (sum+target)%2 == 1) return 0;
int[][] dp = new int[n+1][a+1];
//初始化
dp[0][0] = 1;
for(int i = 1; i <= n; i++)
for(int j = 0; j <= a; j++){
dp[i][j] = dp[i-1][j];
if(j >= nums[i-1])
dp[i][j] = dp[i-1][j-nums[i-1]] + dp[i-1][j];
}
return dp[n][a];
}
}
这里利用滚动数组优化,不知道看利用滚动数组优化,不知道的,看这里:链接: 点击
//利用滚动数组优化:
int sum = 0;
int n = nums.length;
for(int i = 0; i < n; i++) sum += nums[i];
int a = (sum+target)/2;//凑出的容积
//处理边界条件
if(a < 0 || (sum+target)%2 == 1) return 0;
int[] dp = new int[a+1];
//初始化
dp[0] = 1;
for(int i = 1; i <= n; i++)
for(int j = a; j >= nums[i-1]; j--){
dp[j] = dp[j-nums[i-1]] + dp[j];
}
return dp[a];