Skip to content

Commit 1dca114

Browse files
committed
Time: 106 ms (46.91%), Space: 44.7 MB (49.38%) - LeetHub
1 parent bb3645b commit 1dca114

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
public int colorTheGrid(int m, int n) {
3+
final int mod = 1_000_000_007;
4+
int total = 1;
5+
for (int i = 0; i < m; i++) total *= 3;
6+
int[][] dp = new int[n+1][total];
7+
int[][] rowValid = new int[total][total];
8+
List<Integer> good = new ArrayList<>();
9+
List<Integer>[] pattern = new ArrayList[total];
10+
for (int i = 0; i < total; i++) pattern[i] = new ArrayList<>();
11+
for (int i = 0; i < total; i++) {
12+
int val = i, valid = 1;
13+
for (int j = 0; j < m; j++) {
14+
pattern[i].add(val % 3);
15+
val /= 3;
16+
}
17+
for (int j = 1; j < m; j++) if (pattern[i].get(j).equals(pattern[i].get(j-1))) valid = 0;
18+
if (valid == 1) good.add(i);
19+
}
20+
for (int i : good) dp[1][i] = 1;
21+
for (int i : good) {
22+
for (int j : good) {
23+
rowValid[i][j] = 1;
24+
for (int k = 0; k < m; k++) if (pattern[i].get(k).equals(pattern[j].get(k))) rowValid[i][j] = 0;
25+
}
26+
}
27+
for (int col = 2; col <= n; col++) {
28+
for (int i : good) {
29+
long sum = 0;
30+
for (int j : good) if (rowValid[i][j] == 1) sum += dp[col-1][j];
31+
dp[col][i] = (int)(sum % mod);
32+
}
33+
}
34+
long ans = 0;
35+
for (int i = 0; i < total; i++) ans += dp[n][i];
36+
return (int)(ans % mod);
37+
}
38+
}

0 commit comments

Comments
 (0)