2025.7.3 学习
2025.7.3 学习
leetcode 416

class Solution {
public boolean canPartition(int[] nums) {
int sum = 0,num, len = nums.length;
for (int i = 0; i < len; i++) {
sum += nums[i];
}
if (sum % 2 == 1) return false;
boolean dp[][] = new boolean[len][sum + 1];
sum /= 2;
// for (int i = 0; i < len; i++) {
// for (int j = 0; j < sum; j++) {
// dp[i][j] = false;
// }
// }
dp[0][0] = true;
dp[0][nums[0]] = true;
for (int i = 1; i < len; i++) {
for (int j = 0; j < sum+1; j++) {
if (j >= nums[i]) {
dp[i][j] = dp[i - 1][j] | dp[i - 1][j - nums[i]];
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
//dp[i][j]=dp[i-1][j-nums[i]]||dp[i-1][j]
return dp[len - 1][sum];
}
}
注意我注释掉的部分,创建boolean数组默认就是全为false
本题思路是转化为0-1背包,二维dp,dp[i][j] ,i表示第i位元素,j表示和为j,dp[i][j]表示前i个元素是否能凑出和为j
study
学习kibana,grafana metrics,看kafka架构,明天可以来一个kafka的博客

浙公网安备 33010602011771号