mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
@ -275,19 +275,23 @@ class Solution {
|
||||
public int findTargetSumWays(int[] nums, int target) {
|
||||
int sum = 0;
|
||||
for (int i = 0; i < nums.length; i++) sum += nums[i];
|
||||
//如果target过大 sum将无法满足
|
||||
if ( target < 0 && sum < -target) return 0;
|
||||
if ((target + sum) % 2 != 0) return 0;
|
||||
int size = (target + sum) / 2;
|
||||
if(size < 0) size = -size;
|
||||
int[] dp = new int[size + 1];
|
||||
|
||||
//如果target的绝对值大于sum,那么是没有方案的
|
||||
if (Math.abs(target) > sum) return 0;
|
||||
//如果(target+sum)除以2的余数不为0,也是没有方案的
|
||||
if ((target + sum) % 2 == 1) return 0;
|
||||
|
||||
int bagSize = (target + sum) / 2;
|
||||
int[] dp = new int[bagSize + 1];
|
||||
dp[0] = 1;
|
||||
|
||||
for (int i = 0; i < nums.length; i++) {
|
||||
for (int j = size; j >= nums[i]; j--) {
|
||||
for (int j = bagSize; j >= nums[i]; j--) {
|
||||
dp[j] += dp[j - nums[i]];
|
||||
}
|
||||
}
|
||||
return dp[size];
|
||||
|
||||
return dp[bagSize];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
Reference in New Issue
Block a user