1411. Number of Ways to Paint N*3 Grid

更新 發佈閱讀 7 分鐘
https://leetcode.com/problems/number-of-ways-to-paint-n-3-grid?envType=daily-question&envId=2026-01-03

第一個在 leetcode 寫到的 Hard 題目,我覺得這題不算是很難想出解法的類型,他難的是如何寫出一個不會 TLE 的 code。

看到題目我的第一個想法是遞迴,但純用遞迴的話妥妥的 TLE 了,n = 5000 完全扛不住,畢竟類似的 pattern 多做了好幾次。參考提示後,使用 dp[][][][] 來用空間換取時間,就可以剪枝來減少可能百分之九十的遞迴。

程式碼如下。自以為很完美,結果 summit 出去才 beat 5% 哈哈...當時的我真的想不到我的算法還有哪裡可以優化的,因此到了討論區看別人的做法。

class Solution {

public:
static const int MOD = 1000000007;

int numOfWays(int n) {
vector dp(n, vector(3, vector(3, vector<int>(3, -1))));
vector<int> dummy = {3, 3, 3};
return compute(n, 0, dummy, dp);
}

int compute(int n, int cur_n, vector<int>& last, vector<vector<vector<vector<int>>>>& dp) {

if (cur_n == n) {
dp[cur_n -1][last[0]][last[1]][last[2]] = 1;
return 1;
}

long long ans = 0;

for (int i = 0; i < 3; i++) {
if (i == last[0]) continue;
for (int j = 0; j < 3; j++) {
if (j == i || j == last[1]) continue;
for (int k = 0; k < 3; k++) {
if (k == j || k == last[2]) continue;
vector<int> cur = {i, j, k};

if (dp[cur_n][i][j][k] != -1)
ans += dp[cur_n][i][j][k];
else
ans += compute(n, cur_n + 1, cur, dp);
}
}
}

ans %= MOD;
if(cur_n != 0) {
dp[cur_n-1][last[0]][last[1]][last[2]] = ans;
}
return ans;
}
};

Best Solution

看到的當下真的是腦袋當機了,A 是什麼?B 又是什麼?作者有解釋,但我愣是看不懂他在說什麼,看到有別人提出 A 跟 B 個是兩種 pattern,就著這句話我再回頭看題目的 description 就有了新的見解!

A 是 XYZ 的這種 pattern,B 是 XYX。基於這兩種 pattern 會再各自產生出 2XYX+2XYZ 以及 3XYX+2XYZ。然後就這樣一直乘下去!

基本上是排列組合的概念,他去觀察了基於這兩個 pattern 會產生出的結果,並且把它做個 summary 歸納出規律!我覺得蠻厲害的,能夠想到這樣解法的人對於數學應該蠻敏銳的,可惜我不是這個人嗚嗚嗚。

class Solution {
public:
int numOfWays(int n) {
const int MOD = 1000000007;
long long A = 6, B = 6; // n = 1

// XYZ: 2*2*2 - 1 * 2 - 1 * 2 = 4 // 2*XYX 2*XYZ
// XYX: 2*2*2 - 1 * 2 - 1 * 2 + 1 = 5 // 3*XYX 2*XYZ

// A: XYZ
// B: XYX

for (int i = 2; i <= n; i++) {
long long newA = (2 * A + 2 * B) % MOD;
long long newB = (2 * A + 3 * B) % MOD;
A = newA;
B = newB;
}

return (A + B) % MOD;
}
};
留言
avatar-img
星星在晚上的時候不睡覺
0會員
13內容數
資工系的勞碌人生
2026/01/02
https://leetcode.com/problems/magic-squares-in-grid?envType=daily-question&envId=2025-12-30 這題是乍看之下有點難的 Medium,實際上在 Medium 難度中應該算中下(個人觀點)。 看到題目的當下,便
2026/01/02
https://leetcode.com/problems/magic-squares-in-grid?envType=daily-question&envId=2025-12-30 這題是乍看之下有點難的 Medium,實際上在 Medium 難度中應該算中下(個人觀點)。 看到題目的當下,便
2025/12/29
https://leetcode.com/problems/pyramid-transition-matrix/submissions/1868719957 終於寫到一題有難度的 medium 了!!這一題若是沒有看過,光理解題目就要花點時間了。 理解題目後我第一時間想到的做法是 recursi
2025/12/29
https://leetcode.com/problems/pyramid-transition-matrix/submissions/1868719957 終於寫到一題有難度的 medium 了!!這一題若是沒有看過,光理解題目就要花點時間了。 理解題目後我第一時間想到的做法是 recursi
2025/12/28
https://leetcode.com/problems/add-two-numbers?envType=problem-list-v2&envId=rabvlt31 很簡單的一題,不知道為啥加在 Medium。 簡單來說,就是每個位數的相加,沒有難度,題目甚至已經是 reverse 的 li
2025/12/28
https://leetcode.com/problems/add-two-numbers?envType=problem-list-v2&envId=rabvlt31 很簡單的一題,不知道為啥加在 Medium。 簡單來說,就是每個位數的相加,沒有難度,題目甚至已經是 reverse 的 li
看更多
你可能也想看
Thumbnail
玉山 Unicard 新戶首刷禮,百大指定消費最高 7.5% 回饋,其中包含日本、韓國、臺灣在地 100 大指定通路,以及國內外旅遊平台、航空公司點數回饋上限1000點。 五大平台每月最高可回饋點數 500 點,今年年底前(12 月底)最後申辦機會,使用期限直達 2026 年 6 月,快把握機會!
Thumbnail
玉山 Unicard 新戶首刷禮,百大指定消費最高 7.5% 回饋,其中包含日本、韓國、臺灣在地 100 大指定通路,以及國內外旅遊平台、航空公司點數回饋上限1000點。 五大平台每月最高可回饋點數 500 點,今年年底前(12 月底)最後申辦機會,使用期限直達 2026 年 6 月,快把握機會!
Thumbnail
許多人為了信用卡優惠,持有大量信用卡,看似精打細算,實則可能浪費時間、造成財務混亂。本文以玉山Unicard為例,探討如何透過整合回饋、簡化選擇,解決多卡族的痛點,實現簡易消費與簡單理財。
Thumbnail
許多人為了信用卡優惠,持有大量信用卡,看似精打細算,實則可能浪費時間、造成財務混亂。本文以玉山Unicard為例,探討如何透過整合回饋、簡化選擇,解決多卡族的痛點,實現簡易消費與簡單理財。
Thumbnail
題目 : 121. Best Time to Buy and Sell Stock
Thumbnail
題目 : 121. Best Time to Buy and Sell Stock
Thumbnail
題目 : 100. Same Tree
Thumbnail
題目 : 100. Same Tree
Thumbnail
題目 : 83. Remove Duplicates from Sorted List
Thumbnail
題目 : 83. Remove Duplicates from Sorted List
Thumbnail
題目 : 69. Sqrt(x)
Thumbnail
題目 : 69. Sqrt(x)
Thumbnail
題目 : 35. Search Insert Position
Thumbnail
題目 : 35. Search Insert Position
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String
Thumbnail
題目:66. Plus One
Thumbnail
題目:66. Plus One
Thumbnail
題目 : 9. Palindrome Number
Thumbnail
題目 : 9. Palindrome Number
Thumbnail
題目 : 14. Longest Common Prefix
Thumbnail
題目 : 14. Longest Common Prefix
Thumbnail
題目 : 13. Roman to Integer
Thumbnail
題目 : 13. Roman to Integer
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News