Simple recursion solution but got TLE.
public class Solution {
private boolean isJump = false;
public void canJumpRecur(int cur, int k, int[] nums) {
if (cur == nums.length-1) { isJump = true; return; }
for (int i=1; i<=k; i++)
if (cur+i < nums.length)
canJumpRecur(cur+i, nums[cur+i], nums);
}
public boolean canJump(int[] nums) {
canJumpRecur(0, nums[0], nums);
return isJump;
}
}
Another approach.
/**
* Assume the length of the array is len, and the beginning target is len-1.
* Then starting from len-2,
* if nums[len-2] + len-2 >= len-1 which means we can reach len-1 from len-2.
* set len-2 as new target.
* else check the previous index which is len-3.
* finally if the target equals to 0 which means we can find a path from 0 to len-1.
*/
public class Solution {
public boolean canJump(int[] nums) {
int len = nums.length;
int target = len-1;
for (int i=len-2; i>=0; i--)
if (nums[i]+i >= target)
target = i;
return target == 0;
}
}