1411. Number of Ways to Paint N ร— 3 Grid

ref:

1. think what part I stuck?
the DP formula, 
ๆ‰€ไปฅ่ฆ้‡ๅฐๆ‰€ๆœ‰ๆŽ’ๅˆ—็ต„ๅˆ, 3*3*3 = 27, ๅŽปๆ€่€ƒ
ABC
ABA
้€™ๅ…ฉ็จฎ็‹€ๆณไธ‹, ๆŽ’้™ค้™ๅˆถๆขไปถๅพŒ, ๆœƒๅ‰ฉๅนพๅ€‹๏ผŸ

the detail of problem (vertical side, ไธ่ƒฝไธ€ๆจฃ
ไนŸๅฐฑๆ˜ฏ้€™ไธ€ๅˆ—ๅฆ‚ๆžœๆ˜ฏ 010
ไธ‹ไธ€ๅˆ—ไธ‰ๅ€‹ไฝ็ฝฎไธ่ƒฝ่ทŸไธŠไธ€ๅˆ—ไธ€ๆจฃ

2. see solution, think about how this person came out this solution? whatโ€™s their thought process, why we have the same question and same knowledge, but I cant?
ไธป่ฆ้‚„ๆ˜ฏๆ€่€ƒๆŽ’ๅˆ—็ต„ๅˆ็š„้Ž็จ‹, ่ฆๅˆ†ๆž ABC ABA ๅ…ฉ็จฎcase

3. note strategy! remember it!
ๆ‰€ไปฅ็ญ–็•ฅๆ˜ฏไป€้บผ๏ผŸ ่ฆๅœจ็œ‹ leetcode 1349

dp

time: O(n)

space: O(n)

notice use long first

class Solution {
    public int numOfWays(int n) {
        // 0 ABC 012 => ABC 102, 201, ABA 101, 121
        // 1 ABA 010 => ABC 102 201, ABA 101, 121, 202
        
        // dp[i][0] = dp[i-1][0]*2 + dp[i-1][1]*2;
        // dp[i][1] = dp[i-1][0]*2 + dp[i-1][1]*3;
        
        int mod = 1000000007;
        long dp[][] = new long[n][2];
        
        dp[0][0] = 6;
        dp[0][1] = 6;
        
        for (int i = 1; i < n; i++) {
            dp[i][0] = (dp[i-1][0]*2 + dp[i-1][1]*2)%mod;
            dp[i][1] = (dp[i-1][0]*2 + dp[i-1][1]*3)%mod;
        }
        
        return (int)(dp[n-1][0] + dp[n-1][1])%mod;
    }
}

use variables

time: O(n)

space: O(1)

class Solution {
    public int numOfWays(int n) {
        // 0 ABC 012 => ABC 102, 201, ABA 101, 121
        // 1 ABA 010 => ABC 102 201, ABA 101, 121, 202
        
        // dp[i][0] = dp[i-1][0]*2 + dp[i-1][1]*2;
        // dp[i][1] = dp[i-1][0]*2 + dp[i-1][1]*3;
        
        int mod = 1000000007;
        
        long dp0 = 6;
        long dp1 = 6;
        
        for (int i = 1; i < n; i++) {
            long newDp0 = (dp0*2 + dp1*2)%mod;
            long newDp1 = (dp0*2 + dp1*3)%mod;
            dp0 = newDp0;
            dp1 = newDp1;
        }
        
        return (int)(dp0 + dp1)%mod;
    }
}

Last updated