Skip to content

Commit ff24b1f

Browse files
committed
feat: solve No.403
1 parent 0147c6d commit ff24b1f

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

401-500/403. Frog Jump.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# 403. Frog Jump
2+
3+
- Difficulty: Hard.
4+
- Related Topics: Array, Dynamic Programming.
5+
- Similar Questions: Minimum Sideway Jumps, Solving Questions With Brainpower, Maximum Number of Jumps to Reach the Last Index.
6+
7+
## Problem
8+
9+
A frog is crossing a river. The river is divided into some number of units, and at each unit, there may or may not exist a stone. The frog can jump on a stone, but it must not jump into the water.
10+
11+
Given a list of `stones`' positions (in units) in sorted **ascending order**, determine if the frog can cross the river by landing on the last stone. Initially, the frog is on the first stone and assumes the first jump must be `1` unit.
12+
13+
If the frog's last jump was `k` units, its next jump must be either `k - 1`, `k`, or `k + 1` units. The frog can only jump in the forward direction.
14+
15+
 
16+
Example 1:
17+
18+
```
19+
Input: stones = [0,1,3,5,6,8,12,17]
20+
Output: true
21+
Explanation: The frog can jump to the last stone by jumping 1 unit to the 2nd stone, then 2 units to the 3rd stone, then 2 units to the 4th stone, then 3 units to the 6th stone, 4 units to the 7th stone, and 5 units to the 8th stone.
22+
```
23+
24+
Example 2:
25+
26+
```
27+
Input: stones = [0,1,2,3,4,8,9,11]
28+
Output: false
29+
Explanation: There is no way to jump to the last stone as the gap between the 5th and 6th stone is too large.
30+
```
31+
32+
 
33+
**Constraints:**
34+
35+
36+
37+
- `2 <= stones.length <= 2000`
38+
39+
- `0 <= stones[i] <= 231 - 1`
40+
41+
- `stones[0] == 0`
42+
43+
- `stones` is sorted in a strictly increasing order.
44+
45+
46+
47+
## Solution
48+
49+
```javascript
50+
/**
51+
* @param {number[]} stones
52+
* @return {boolean}
53+
*/
54+
var canCross = function(stones) {
55+
return stones[1] - stones[0] === 1
56+
? helper(stones, 1, 1, Array(stones.length).fill(0).map(() => ({})))
57+
: false;
58+
};
59+
60+
var helper = function(stones, i, k, dp) {
61+
if (dp[i][k]) return false;
62+
for (var j = i + 1; j < stones.length; j++) {
63+
var diff = stones[j] - stones[i];
64+
if (diff > k + 1) break;
65+
if (diff < k - 1) continue;
66+
if (helper(stones, j, diff, dp)) return true;
67+
}
68+
dp[i][k] = true;
69+
return i === stones.length - 1;
70+
};
71+
```
72+
73+
**Explain:**
74+
75+
nope.
76+
77+
**Complexity:**
78+
79+
* Time complexity : O(n ^ 2).
80+
* Space complexity : O(n ^ 2).

0 commit comments

Comments
 (0)