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