๐ŸŒ• ๐ŸŒ— 416. ๅˆ†ๅ‰ฒ็ญ‰ๅ’Œๅญ้›†

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

๐ŸŒ• ๐ŸŒ— 416. ๅˆ†ๅ‰ฒ็ญ‰ๅ’Œๅญ้›†

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

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

img_15.png


่งฃๆณ•

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;
    }
}

่พ“ๅ‡บ

img_14.png

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