Skip to content

Commit 3a1665d

Browse files
authored
Create 2245-maximum-trailing-zeros-in-a-cornered-path.js
1 parent 5af0034 commit 3a1665d

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* @param {number[][]} grid
3+
* @return {number}
4+
*/
5+
const maxTrailingZeros = function(grid) {
6+
const g = grid
7+
const m = g.length;
8+
const n = g[0].length;
9+
const ta = [...Array(m)].map(i => Array(n).fill(1));
10+
const tb = [...Array(m)].map(i => Array(n).fill(1));
11+
const tc = [...Array(m)].map(i => Array(n).fill(1));
12+
const td = [...Array(m)].map(i => Array(n).fill(1));
13+
14+
const c52 = (s) => {
15+
let c5 = 0;
16+
let c2 = 0;
17+
while (s % 2 === 0) {
18+
s = s / 2;
19+
c2++;
20+
}
21+
while (s % 5 === 0) {
22+
s = s / 5;
23+
c5++;
24+
}
25+
return [c5, c2];
26+
}
27+
28+
const c10 = ([c5, c2]) => {
29+
return Math.min(c5, c2);
30+
}
31+
32+
for (let i = 0; i < m; i++) {
33+
for (let j = 0; j < n; j++) {
34+
ta[i][j] = (j === 0) ? c52(g[i][j]) : [c52(g[i][j])[0] + ta[i][j-1][0], c52(g[i][j])[1] + ta[i][j-1][1]];
35+
tb[i][j] = (i === 0) ? c52(g[i][j]) : [c52(g[i][j])[0] + tb[i-1][j][0], c52(g[i][j])[1] + tb[i-1][j][1]];
36+
}
37+
}
38+
39+
for (let i = m-1; i >= 0; i--) {
40+
for (let j = n-1; j >= 0; j--) {
41+
tc[i][j] = (j === n-1) ? c52(g[i][j]) : [c52(g[i][j])[0] + tc[i][j+1][0], c52(g[i][j])[1] + tc[i][j+1][1]]; // : ctz(hg(g[i][j]) * tc[i][j+1][0], tc[i][j+1][1]); // hg(g[i][j]) * tc[i][j+1];
42+
td[i][j] = (i === m-1) ? c52(g[i][j]) : [c52(g[i][j])[0] + td[i+1][j][0], c52(g[i][j])[1] + td[i+1][j][1]]; // : ctz(hg(g[i][j]) * td[i+1][j][0], td[i+1][j][1]); // hg(g[i][j]) * td[i+1][j];
43+
}
44+
}
45+
46+
let ret = 0;
47+
for (let i = 0; i < m; i++) {
48+
for (let j = 0; j < n; j++) {
49+
let s1 = i === 0 ? c10(ta[i][j]) : c10([ta[i][j][0] + tb[i-1][j][0], ta[i][j][1] + tb[i-1][j][1]]);
50+
let s2 = i === m - 1 ? c10(ta[i][j]) : c10([ta[i][j][0] + td[i+1][j][0], ta[i][j][1] + td[i+1][j][1]]);
51+
let s3 = i === 0 ? c10(tc[i][j]) : c10([tc[i][j][0] + tb[i-1][j][0], tc[i][j][1] + tb[i-1][j][1]]);
52+
let s4 = i === m - 1 ? c10(tc[i][j]) : c10([tc[i][j][0] + td[i+1][j][0], tc[i][j][1] + td[i+1][j][1]]);
53+
ret = Math.max(ret, s1, s2, s3, s4);
54+
}
55+
}
56+
return ret;
57+
};

0 commit comments

Comments
 (0)