๐ŸŒ•๐ŸŒ•๐ŸŒ— 474. ไธ€ๅ’Œ้›ถ

ๅžไฝ›็ซฅๅญ2022ๅนด6ๆœˆ9ๆ—ฅๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ•๐ŸŒ•๐ŸŒ— 474. ไธ€ๅ’Œ้›ถ

้šพๅบฆ: ๐ŸŒ• ๐ŸŒ• ๐ŸŒ—

้—ฎ้ข˜ๆ่ฟฐ

img_21.png


่งฃๆณ•

class Solution {
    public int findMaxForm(String[] strs, int m, int n) {
        // ๆ€่ทฏ๏ผš
        // ่ƒŒๅŒ…้—ฎ้ข˜
        // dp[i] = dp[i - nums[j]] + 1, dp[i]
        // ็ปŸ่ฎกๆฏไธชๅญ—็ฌฆไธฒ็š„ 0 & 1 ไธชๆ•ฐ
        int len = strs.length;
        int[][] array = new int[len][2];
        for(int i = 0; i < len; i ++) {
            String s = strs[i];
            int[] tmp = zeros(s);
            array[i][0] = tmp[0];
            array[i][1] = tmp[1];
        }
        // dp
        int[][] dp = new int[m + 1][n + 1];
        // ๅพ€่ƒŒๅŒ…ไธญไธ€ไธชไธชๆ”พๅ…ฅ็‰ฉๅ“่ฟ›่กŒๅฐ่ฏ•
        for(int j = 0; j < len; j ++) {
            // ๅฝ“่ƒŒๅŒ…็š„ๅฎน้‡้™ไฝŽๅˆฐๆŸ็ง็จ‹ๅบฆไน‹ๅŽ๏ผŒๅ†ๅฐ็š„ๅฎน้‡่‚ฏๅฎšไนŸๆ”พไธไธ‹่ฏฅ็‰ฉๅ“ไบ†๏ผŒๅ› ๆญคๅณไฝฟๆญขๆŸ
            for(int p = m; p - array[j][0] >= 0; p --) {
                for(int q = n; q - array[j][1] >= 0; q --) {
                    dp[p][q] = Math.max(dp[p][q], dp[p - array[j][0]][q - array[j][1]] + 1);
                }
            }
        }
        return dp[m][n];
    }

    private int[] zeros(String s) {
        int len = s.length();
        int[] res = new int[] {0, 0};
        for(char c : s.toCharArray()) {
            if(c == '0') {
                res[0] ++;
            } else {
                res[1] ++;
            }
        }
        return res;
    }
}

่พ“ๅ‡บ

img_20.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/10/10 ไธ‹ๅˆ8:43:48
่ดก็Œฎ่€…: liuxianzhishou