class Solution {
public boolean canPartition(int[] nums) {
//f[i][j] -> 遍历到第i个数为止是否存在和为j的子数组
int sum = 0,n = nums.length;
for(int num : nums)
sum += num;
if(sum % 2 != 0)
return false;
// boolean[][] f = new boolean[n+1][sum/2 + 1];
// f[0][0] = true;
boolean[] f = new boolean[sum/2 + 1];
f[0] = true;
for(int i = 1;i <= n;i++){
for(int j = sum/2;j >= 0;j--){
if(j-nums[i-1] >= 0)
f[j] = f[j-nums[i-1]] | f[j];
else
f[j] = f[j];
// if(j-nums[i-1] >= 0)
// f[i][j] = f[i-1][j-nums[i-1]] | f[i-1][j];
// else
// f[i][j] = f[i-1][j];
}
}
return f[sum/2];
}
}
leetcode416. 分割等和子集
最新推荐文章于 2024-08-14 22:49:08 发布