Skip to content

Commit 9003f63

Browse files
committed
feat: add typescript solution to lc problem: No.2245
No.2245.Maximum Trailing Zeros in a Cornered Path
1 parent 5a1736a commit 9003f63

File tree

3 files changed

+108
-2
lines changed

3 files changed

+108
-2
lines changed

solution/2200-2299/2245.Maximum Trailing Zeros in a Cornered Path/README.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,42 @@
8686
### **TypeScript**
8787

8888
```ts
89-
89+
function maxTrailingZeros(grid: number[][]): number {
90+
let m = grid.length, n = grid[0].length;
91+
let r2 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0)),
92+
c2 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0)),
93+
r5 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0)),
94+
c5 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0));
95+
for (let i = 1; i <= m; i++) {
96+
for (let j = 1; j <= n; j++) {
97+
let cur = grid[i - 1][j - 1];
98+
let two = 0, five = 0;
99+
while (cur % 2 == 0) two++, cur /= 2;
100+
while (cur % 5 == 0) five++, cur /= 5;
101+
r2[i][j] = r2[i - 1][j] + two;
102+
c2[i][j] = c2[i][j - 1] + two;
103+
r5[i][j] = r5[i - 1][j] + five;
104+
c5[i][j] = c5[i][j - 1] + five;
105+
}
106+
}
107+
let ans = 0;
108+
function getMin (i0, j0, i1, j1, i3, j3, i4, j4): number {
109+
// 横向开始、结束,竖向开始、结束
110+
const two = c2[i1][j1] - c2[i0][j0] + r2[i4][j4] - r2[i3][j3];
111+
const five = c5[i1][j1] - c5[i0][j0] + r5[i4][j4] - r5[i3][j3];
112+
return Math.min(two, five);
113+
}
114+
for (let i = 1; i <= m; i++) {
115+
for (let j = 1; j <= n; j++) {
116+
const leftToTop = getMin(i, 0, i, j, 0, j, i - 1, j),
117+
leftToBotton = getMin(i, 0, i, j, i, j, m, j),
118+
rightToTop = getMin(i, j, i, n, 0, j, i, j),
119+
rightToBotton = getMin(i, j, i, n, i - 1, j, m, j);
120+
ans = Math.max(leftToTop, leftToBotton, rightToTop, rightToBotton, ans);
121+
}
122+
}
123+
return ans;
124+
};
90125
```
91126

92127
### **...**

solution/2200-2299/2245.Maximum Trailing Zeros in a Cornered Path/README_EN.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,42 @@ There are no cornered paths in the grid that result in a product with a trailing
7373
### **TypeScript**
7474

7575
```ts
76-
76+
function maxTrailingZeros(grid: number[][]): number {
77+
let m = grid.length, n = grid[0].length;
78+
let r2 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0)),
79+
c2 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0)),
80+
r5 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0)),
81+
c5 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0));
82+
for (let i = 1; i <= m; i++) {
83+
for (let j = 1; j <= n; j++) {
84+
let cur = grid[i - 1][j - 1];
85+
let two = 0, five = 0;
86+
while (cur % 2 == 0) two++, cur /= 2;
87+
while (cur % 5 == 0) five++, cur /= 5;
88+
r2[i][j] = r2[i - 1][j] + two;
89+
c2[i][j] = c2[i][j - 1] + two;
90+
r5[i][j] = r5[i - 1][j] + five;
91+
c5[i][j] = c5[i][j - 1] + five;
92+
}
93+
}
94+
let ans = 0;
95+
function getMin (i0, j0, i1, j1, i3, j3, i4, j4): number {
96+
// 横向开始、结束,竖向开始、结束
97+
const two = c2[i1][j1] - c2[i0][j0] + r2[i4][j4] - r2[i3][j3];
98+
const five = c5[i1][j1] - c5[i0][j0] + r5[i4][j4] - r5[i3][j3];
99+
return Math.min(two, five);
100+
}
101+
for (let i = 1; i <= m; i++) {
102+
for (let j = 1; j <= n; j++) {
103+
const leftToTop = getMin(i, 0, i, j, 0, j, i - 1, j),
104+
leftToBotton = getMin(i, 0, i, j, i, j, m, j),
105+
rightToTop = getMin(i, j, i, n, 0, j, i, j),
106+
rightToBotton = getMin(i, j, i, n, i - 1, j, m, j);
107+
ans = Math.max(leftToTop, leftToBotton, rightToTop, rightToBotton, ans);
108+
}
109+
}
110+
return ans;
111+
};
77112
```
78113

79114
### **...**
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
function maxTrailingZeros(grid: number[][]): number {
2+
let m = grid.length, n = grid[0].length;
3+
let r2 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0)),
4+
c2 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0)),
5+
r5 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0)),
6+
c5 = Array.from({ length : m + 1 }, v => new Array(n + 1).fill(0));
7+
for (let i = 1; i <= m; i++) {
8+
for (let j = 1; j <= n; j++) {
9+
let cur = grid[i - 1][j - 1];
10+
let two = 0, five = 0;
11+
while (cur % 2 == 0) two++, cur /= 2;
12+
while (cur % 5 == 0) five++, cur /= 5;
13+
r2[i][j] = r2[i - 1][j] + two;
14+
c2[i][j] = c2[i][j - 1] + two;
15+
r5[i][j] = r5[i - 1][j] + five;
16+
c5[i][j] = c5[i][j - 1] + five;
17+
}
18+
}
19+
let ans = 0;
20+
function getMin (i0, j0, i1, j1, i3, j3, i4, j4): number {
21+
// 横向开始、结束,竖向开始、结束
22+
const two = c2[i1][j1] - c2[i0][j0] + r2[i4][j4] - r2[i3][j3];
23+
const five = c5[i1][j1] - c5[i0][j0] + r5[i4][j4] - r5[i3][j3];
24+
return Math.min(two, five);
25+
}
26+
for (let i = 1; i <= m; i++) {
27+
for (let j = 1; j <= n; j++) {
28+
const leftToTop = getMin(i, 0, i, j, 0, j, i - 1, j),
29+
leftToBotton = getMin(i, 0, i, j, i, j, m, j),
30+
rightToTop = getMin(i, j, i, n, 0, j, i, j),
31+
rightToBotton = getMin(i, j, i, n, i - 1, j, m, j);
32+
ans = Math.max(leftToTop, leftToBotton, rightToTop, rightToBotton, ans);
33+
}
34+
}
35+
return ans;
36+
};

0 commit comments

Comments
 (0)