403. Frog Jump
LeetCode 403. Frog Jump
Description
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.
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.
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.
Example 1:
Example 2:
Constraints:
2 <= stones.length <= 2000
0 <= stones[i] <= 2^31 - 1
stones[0] == 0
Tags
Dynamic Programming, Backtracking
Solution
See Reference for Dynamic Programming solutions.
Here we use the DFS strategy and use a stack to store each state rather than recursion. We define the pair{unit, k}
to describe the state, and initialize the states stack with []pair{{3, 2}, {2, 1}, {1, 0}}
since the problem requires the first jump must be 1
unit. The goal is return true if we can find a pair whose unit is the last element of the input array. When traverse the stack, we ignore pairs that:
k of whom is 0;
unit of whom does not exist in the array;
have been visited (use a set to record).
The remain states pair{pos.unit + pos.k + i, pos.k + i} (-1 ≤ i ≤ 1)
would be pushed into the stack. If the goal cannot be reached before the stack becomes empty, we return false.
Complexity
Time complexity:
Space complexity:
Code
Reference
Last updated
Was this helpful?