File tree Expand file tree Collapse file tree 1 file changed +38
-0
lines changed
2061-painting-a-grid-with-three-different-colors Expand file tree Collapse file tree 1 file changed +38
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments