- 2.17
- 如果数组长度为 1.【0】,返回 true;
- 这里的调跳跃长度为 i(当前位置)+nums【i】(当前格子能跳跃的距离)
- 如果调不了当前位置,直接返 false
class Solution {
public boolean canJump(int[] nums) {
int step = 0;
for(int i=0;i<nums.length;i++){
if(i>step) return false;
step = Math.max(step,nums[i]+i);
if(step>nums.length){
return true;
}
}
return true;
}
}- 2.3
- 记录每个格子的最大里程数,而不用考虑多种情况
class Solution {
public boolean canJump(int[] nums) {
int maxJump = 0;
for(int i=0;i<nums.length;i++){
if(i>maxJump) return false;
maxJump = Math.max(maxJump,i+nums[i]);
if(maxJump>nums.length) return true;
}
return true;
}
}-
同样简单,记录最大到达距离:i+nums[i],大于数组长度即可
-
12.1
- 先进行断头路判断:当前的格子是否能考之前积累的路程走完
- 更新最大距离时,用
i+nums[i]:当前所在的位置加之前能跳的最大距离
class Solution {
public boolean canJump(int[] nums) {
int maxReach = 0;
for(int i =0;i<nums.length;i++){
if(i>maxReach) return false;
maxReach = Math.max(maxReach,i+nums[i]);
if(maxReach>=nums.length-1) return true;
}
return true;
}
}