forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.ts
27 lines (27 loc) · 800 Bytes
/
Solution.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function canCross(stones: number[]): boolean {
const n = stones.length;
const pos: Map<number, number> = new Map();
for (let i = 0; i < n; ++i) {
pos.set(stones[i], i);
}
const f: number[][] = new Array(n).fill(0).map(() => new Array(n).fill(-1));
const dfs = (i: number, k: number): boolean => {
if (i === n - 1) {
return true;
}
if (f[i][k] !== -1) {
return f[i][k] === 1;
}
for (let j = k - 1; j <= k + 1; ++j) {
if (j > 0 && pos.has(stones[i] + j)) {
if (dfs(pos.get(stones[i] + j)!, j)) {
f[i][k] = 1;
return true;
}
}
}
f[i][k] = 0;
return false;
};
return dfs(0, 0);
}