力扣算法学习day28-3
494-目标和
代码实现-补充dp方法(01背包)
class Solution {
public int findTargetSumWays(int[] nums, int target) {
int sum = 0;
for(int i = 0;i < nums.length;i++){
sum += nums[i];
}
if((sum + target) % 2 == 1){
return 0;
}
if(Math.abs(target) > sum){
return 0;
}
int x = (sum - target)/2;
int[] dp = new int[x+1];
dp[0] = 1;
for(int i = 0;i < nums.length;i++){
for(int j = dp.length-1;j >= nums[i];j--){
dp[j] += dp[j-nums[i]];
}
}
return dp[x];
}
}
初次遇到组合和背包问题结合,看着答案理解上都很难,花了大量时间在大脑模拟(主要忘带笔了),通过先分析二维背包比较好理解,再到一维就能理解了,但是回头看,感觉由题目想到用这种方法还是有一定难度能想到。
|