youngyangyang04/leetcode-master-comment

[Vssue]0474.一和零.md

youngyangyang04 opened this issue · 8 comments

int[][] dp = new int[m + 1][n + 1];

for (String str : strs) {
    int oneNum = 0, zeroNum = 0;
    for (char c : str.toCharArray()) {
        if (c == '0') zeroNum++;
        else oneNum++;
    }
    for (int i = m; i - zeroNum >= 0; i--) {
        for (int j = n; j - oneNum >= 0; j--) {
            dp[i][j] = Math.max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);
        }
    }
}
return dp[m][n];

所以这个题目的意思是,有两个维度,每个维度都是0-1背包问题。同时在每个维度使用的都是之前一维的滚动数组。所以有两个一维的滚动数组,最后合起来变成了二维的了。