难度 中等
这道题不难,一开始理解错了题意以为是一次跳跃的长度,还震惊怎么可能这么简单,后来发现果然是看错题了。最长的跳跃长度,大于0小于这个长度的任何长度都可以。不过也不难,很好理解。
要达到最后一个位置,则要求每个数字都尽量大于0,对于为0的数字,其前面需要有能跳过0的数字。
遍历数组,遇到0,往前回溯,查找是否有可以跳过0的。
判断是否能跳过0:0前的n个数字需要大于n
有一些特殊情况需注意下:一个数组只有一个数字,无论如何都能跳到最后;数组的最后一个数字为0没关系,不需要跳跃。
执行用时 :1 ms, 在所有 Java 提交中击败了99.93%的用户
内存消耗 :41.6 MB, 在所有 Java 提交中击败了12.50%的用户
public boolean canJump(int[] nums) {
if(nums.length < 2){
return true;
}
for(int i = 0; i < nums.length; i++){
if(nums[i] == 0 && i != nums.length-1){
boolean pass = canPass0(nums, i);
if(pass){
continue;
}else{
return false;
}
}
}
return true;
}
public boolean canPass0(int[] nums, int k){
for(int i = k-1; i >= 0; i--){
if(nums[i] > k-i){
return true;
}
}
return false;
}