Skip to content

Commit 9b8bd81

Browse files
authored
Update 1931-painting-a-grid-with-three-different-colors.js
1 parent fb16d68 commit 9b8bd81

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

1931-painting-a-grid-with-three-different-colors.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,50 @@ const colorTheGrid = function(m, n) {
100100

101101
return dp(0, 0)
102102
};
103+
104+
// another
105+
106+
/**
107+
* @param {number} m
108+
* @param {number} n
109+
* @return {number}
110+
*/
111+
const colorTheGrid = function(m, n) {
112+
const mod = 1e9 + 7
113+
const limit = 1 << (2 * m)
114+
const memo = Array.from({ length: n }, () => Array(limit))
115+
116+
return dp(0, 0)
117+
118+
function dp(col, preColMask) {
119+
if(col === n) return 1
120+
let res = 0
121+
122+
if(memo[col][preColMask] != null) return memo[col][preColMask]
123+
const curColMasks = []
124+
dfs(preColMask, 0, 0, curColMasks)
125+
for(const colMask of curColMasks) {
126+
res = (res + dp(col + 1, colMask)) % mod
127+
}
128+
return memo[col][preColMask] = res
129+
}
130+
131+
function dfs(preColMask, curColMask, row, res) {
132+
if(row === m) {
133+
res.push(curColMask)
134+
return
135+
}
136+
for(let i = 1; i <= 3; i++) {
137+
if(getColor(preColMask, row) !== i && (row === 0 || getColor(curColMask, row - 1) !== i)) {
138+
dfs(preColMask, setColor(curColMask, row, i) ,row + 1, res)
139+
}
140+
}
141+
}
142+
143+
function getColor(mask, row) {
144+
return (mask >> (2 * row)) & 3
145+
}
146+
function setColor(mask, row, val) {
147+
return mask | (val << (2 * row))
148+
}
149+
};

0 commit comments

Comments
 (0)