๐ ๐ 416. ๅๅฒ็ญๅๅญ้
2022ๅนด6ๆ9ๆฅๅฐไบ 1 ๅ้
๐ ๐ 416. ๅๅฒ็ญๅๅญ้
้พๅบฆ: ๐ ๐
้ฎ้ขๆ่ฟฐ
่งฃๆณ
class Solution {
public boolean canPartition(int[] nums) {
// ๆ่ทฏ๏ผ
// ่ๅ
้ฎ้ข -- ่ฝๅฆๅกซๅ
่ๅ
ไฝฟๅพ่ๅ
ไปทๅผๆปๅไธบๆปๅ็ไธๅ
int sum = 0;
for(int i : nums) {
sum += i;
}
if((sum & 1) == 1) {
return false;
}
// sum ๆฏๅถๆฐ
sum >>= 1;
// ็ฎๆ ๏ผๅฐฝๅฏ่ฝๅกซๅ
่ๅ
๏ผไฝฟๅพ่ๅ
ไปทๅผๅฐฝๅฏ่ฝๅคง๏ผๅฆๆๆ็ป่ฝๅค == ๆปๅ็ไธๅ๏ผ่ฏดๆๅฏไปฅๅๅฒ็ญๅๅญ้
// dp[i] = dp[i - [j]] + [j]
int len = nums.length;
int[] dp = new int[sum + 1];
// ๅ
้ๅ่ๅ
๏ผๅ้ๅ็ฉๅ๏ผไป่ไฟ่ฏๆฏไธช็ฉๅๆๅคๅช่ฝๆฟไธๆฌก
for(int j = 0; j < len; j ++) {
for(int i = sum; i - nums[j] >= 0; i --) {
dp[i] = Math.max(dp[i], dp[i - nums[j]] + nums[j]);
}
}
return dp[sum] == sum;
}
}