๐ŸŒ— 96. ไธๅŒ็š„ไบŒๅ‰ๆœ็ดขๆ ‘

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

๐ŸŒ— 96. ไธๅŒ็š„ไบŒๅ‰ๆœ็ดขๆ ‘

้šพๅบฆ: ๐ŸŒ—

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

img_13.png


่งฃๆณ•

class Solution {
    public int numTrees(int n) {
        // ๆ€่ทฏ๏ผš
        // 1 - n ๆฏไธช่Š‚็‚นๅ‡ๅฏไปฅๆˆไธบๆ น่Š‚็‚น
        // ไปŽ่€Œๅฐ†ไบŒๅ‰ๆœ็ดขๆ•ฐๅˆ†ไธบไบ†ๅทฆๅณไธคๅŠ
        // ๆ นๆฎไบŒๅ‰ๆœ็ดขๆ•ฐ่Š‚็‚นไธชๆ•ฐ๏ผŒ่ฟ›่กŒ้€’ๅฝ’
        // f(0) = 0
        // f(1) = 1
        // f(2) = (0, 1) + (1, 0) = 2
        // f(3) = (0, 2) + (1, 1) + (2, 0) = 5
        int[] dp = new int[n + 1];
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 2; i <= n; i ++) {
            if(i % 2 == 0) {
                for(int k = 0; k < i / 2; k ++) {
                    dp[i] += dp[k] * dp[i - 1 - k];
                }
                dp[i] *= 2;
            } else {
                for(int k = 0; k < (i - 1) / 2; k ++) {
                    dp[i] += dp[k] * dp[i - 1 - k];
                }
                dp[i] *= 2;
                dp[i] += dp[(i - 1) / 2] * dp[(i - 1) / 2] ;
            }
        }
        return dp[n];
    }
}

่พ“ๅ‡บ

img_12.png

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