• 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

    1. 先进行断头路判断:当前的格子是否能考之前积累的路程走完
    2. 更新最大距离时,用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;
    }
}