顺利完成!
思路:
先找0的位置;
判断是否可以跳过位置0。
public boolean canJump(int[] nums) { int n = nums.length; if(n <=1){ return true; } if(nums[0] == 0){ return false; } for(int i = 0;i<n-1;i++){ if(nums[i] == 0){ int index = i; index --; while(index >= 0){ if(nums[index]> i - index){ break; }else{ index--; } } if(index == -1){ return false; } } } return true; }
public boolean canJump(int[] nums) { int n = nums.length; int reach = 1; for(int i = 0;i<reach && reach<n;i++){ reach = Math.max(reach,i+1+nums[i]); } return reach >=n; }
public boolean canJump(int[] nums) { int n = nums.length; if(n == 0) return true; int left_most = n-1; for(int i = n-2;i>=0;i--){ if(i + nums[i] >= left_most){ left_most = i; } } return left_most == 0; }
public boolean canJump(int[] nums) { int n = nums.length; int[] f = new int[n]; for(int i = 1;i<n;i++){ f[i] = Math.max(f[i-1],nums[i-1]) - 1; //从第0层出发,走到nums[i]时,剩余的最大步数 if(f[i] < 0) return false; } return f[n-1] >= 0; }
——2020.8.4