解法1::贪心(推荐)
class Solution {
public boolean canJump(int[] nums) {
int ans = 0;
for(int i = 0;i<nums.length-1;i++){
ans = Math.max(ans,nums[i]+i);
if(ans<=i){
return false;
}
}
return true;
}
}
解法2:递归
public boolean flag=false;
public int[] vis;
public void dfs(int[]nums,int index,int step){
if(flag){
return;
}
if(vis[index]==1||vis[index]==-1){
return;
}
if(index==nums.length-1){
flag = true;
return;
}
for(int i = index+step;i>index;i--){
if(i>=nums.length){
continue;
}
dfs(nums,i,nums[i]);
}
vis[index]=flag?1:-1;
}
public boolean canJump(int[] nums) {
if(0==nums.length){
return false;
}
vis = new int[nums.length];
dfs(nums,0,nums[0]);
return flag;
}