Skip to content

Commit 2f0b177

Browse files
authored
feat: add ts solution to lc problem No.1293 (#2970)
1 parent b0d7ed5 commit 2f0b177

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

solution/1200-1299/1293.Shortest Path in a Grid with Obstacles Elimination/README.md

+46
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,52 @@ func shortestPath(grid [][]int, k int) int {
230230
}
231231
```
232232

233+
#### TypeScript
234+
235+
```ts
236+
function shortestPath(grid: number[][], k: number): number {
237+
const m = grid.length;
238+
const n = grid[0].length;
239+
if (k >= m + n - 3) {
240+
return m + n - 2;
241+
}
242+
243+
let q: Point[] = [[0, 0, k]];
244+
const vis = Array.from({ length: m }, () =>
245+
Array.from({ length: n }, () => Array.from({ length: k + 1 }, () => false)),
246+
);
247+
vis[0][0][k] = true;
248+
const dirs = [0, 1, 0, -1, 0];
249+
let ans = 0;
250+
251+
while (q.length) {
252+
const nextQ: Point[] = [];
253+
++ans;
254+
255+
for (const [i, j, k] of q) {
256+
for (let d = 0; d < 4; ++d) {
257+
const [x, y] = [i + dirs[d], j + dirs[d + 1]];
258+
if (x === m - 1 && y === n - 1) {
259+
return ans;
260+
}
261+
const v = grid[x]?.[y];
262+
if (v === 0 && !vis[x][y][k]) {
263+
nextQ.push([x, y, k]);
264+
vis[x][y][k] = true;
265+
} else if (v === 1 && k > 0 && !vis[x][y][k - 1]) {
266+
nextQ.push([x, y, k - 1]);
267+
vis[x][y][k - 1] = true;
268+
}
269+
}
270+
}
271+
q = nextQ;
272+
}
273+
return -1;
274+
}
275+
276+
type Point = [number, number, number];
277+
```
278+
233279
<!-- tabs:end -->
234280

235281
<!-- solution:end -->

solution/1200-1299/1293.Shortest Path in a Grid with Obstacles Elimination/README_EN.md

+46
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,52 @@ func shortestPath(grid [][]int, k int) int {
224224
}
225225
```
226226

227+
#### TypeScript
228+
229+
```ts
230+
function shortestPath(grid: number[][], k: number): number {
231+
const m = grid.length;
232+
const n = grid[0].length;
233+
if (k >= m + n - 3) {
234+
return m + n - 2;
235+
}
236+
237+
let q: Point[] = [[0, 0, k]];
238+
const vis = Array.from({ length: m }, () =>
239+
Array.from({ length: n }, () => Array.from({ length: k + 1 }, () => false)),
240+
);
241+
vis[0][0][k] = true;
242+
const dirs = [0, 1, 0, -1, 0];
243+
let ans = 0;
244+
245+
while (q.length) {
246+
const nextQ: Point[] = [];
247+
++ans;
248+
249+
for (const [i, j, k] of q) {
250+
for (let d = 0; d < 4; ++d) {
251+
const [x, y] = [i + dirs[d], j + dirs[d + 1]];
252+
if (x === m - 1 && y === n - 1) {
253+
return ans;
254+
}
255+
const v = grid[x]?.[y];
256+
if (v === 0 && !vis[x][y][k]) {
257+
nextQ.push([x, y, k]);
258+
vis[x][y][k] = true;
259+
} else if (v === 1 && k > 0 && !vis[x][y][k - 1]) {
260+
nextQ.push([x, y, k - 1]);
261+
vis[x][y][k - 1] = true;
262+
}
263+
}
264+
}
265+
q = nextQ;
266+
}
267+
return -1;
268+
}
269+
270+
type Point = [number, number, number];
271+
```
272+
227273
<!-- tabs:end -->
228274

229275
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
function shortestPath(grid: number[][], k: number): number {
2+
const m = grid.length;
3+
const n = grid[0].length;
4+
if (k >= m + n - 3) {
5+
return m + n - 2;
6+
}
7+
8+
let q: Point[] = [[0, 0, k]];
9+
const vis = Array.from({ length: m }, () =>
10+
Array.from({ length: n }, () => Array.from({ length: k + 1 }, () => false)),
11+
);
12+
vis[0][0][k] = true;
13+
const dirs = [0, 1, 0, -1, 0];
14+
let ans = 0;
15+
16+
while (q.length) {
17+
const nextQ: Point[] = [];
18+
++ans;
19+
20+
for (const [i, j, k] of q) {
21+
for (let d = 0; d < 4; ++d) {
22+
const [x, y] = [i + dirs[d], j + dirs[d + 1]];
23+
if (x === m - 1 && y === n - 1) {
24+
return ans;
25+
}
26+
const v = grid[x]?.[y];
27+
if (v === 0 && !vis[x][y][k]) {
28+
nextQ.push([x, y, k]);
29+
vis[x][y][k] = true;
30+
} else if (v === 1 && k > 0 && !vis[x][y][k - 1]) {
31+
nextQ.push([x, y, k - 1]);
32+
vis[x][y][k - 1] = true;
33+
}
34+
}
35+
}
36+
q = nextQ;
37+
}
38+
return -1;
39+
}
40+
41+
type Point = [number, number, number];

0 commit comments

Comments
 (0)