跳跃游戏
1、解题思路:自底向上,动态规划
class Solution { public boolean canJump(int[] nums) { int len = nums.length; if(len<=1){ return true; } boolean[] temps = new boolean[len]; return canJump2(nums,len,0,temps); } public boolean canJump2(int[] nums,int len,int start,boolean[] temps){ if(temps[start]){ return false; } if(start+nums[start]>=len-1){ return true; } for(int i=nums[start];i>0;i--){ if(canJump2(nums,len,start+i,temps)){ return true; } } temps[start]=true; return false; } }
2、动态规划,自顶向下
3、一种很巧的方法
解题思路:从右向左进行遍历,始终记住最左边的可以到达的点,这样子,如果最左边的点等于0,证明就可以到达了。
class Solution { public boolean canJump(int[] nums) { int len = nums.length; if(len<=1){ return true; } int min = len-1; for(int i=len-2;i>=0;i--){ if(nums[i]+i>=min){ min=i; } } if(min==0){ return true; }else{ return false; } } }