mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
Update 0416.分割等和子集.md
This commit is contained in:
@ -185,7 +185,41 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
Java:
|
Java:
|
||||||
|
```Java
|
||||||
|
class Solution {
|
||||||
|
public boolean canPartition(int[] nums) {
|
||||||
|
int sum = 0;
|
||||||
|
for (int i : nums) {
|
||||||
|
sum += i;
|
||||||
|
}
|
||||||
|
if ((sum & 1) == 1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int length = nums.length;
|
||||||
|
int target = sum >> 1;
|
||||||
|
//dp[j]表示前i个元素可以找到相加等于j情况
|
||||||
|
boolean[] dp = new boolean[target + 1];
|
||||||
|
//对于第一个元素,只有当j=nums[0]时,才恰好填充满
|
||||||
|
if (nums[0] <= target) {
|
||||||
|
dp[nums[0]] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i < length; i++) {
|
||||||
|
//j由右往左直到nums[i]
|
||||||
|
for (int j = target; j >= nums[i]; j--) {
|
||||||
|
//只有两种情况,要么放,要么不放
|
||||||
|
//取其中的TRUE值
|
||||||
|
dp[j] = dp[j] || dp[j - nums[i]];
|
||||||
|
}
|
||||||
|
//一旦满足,结束,因为只需要找到一组值即可
|
||||||
|
if (dp[target]) {
|
||||||
|
return dp[target];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dp[target];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Python:
|
Python:
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user