2020-04-17(55. 跳跃游戏**)

难度 中等
这道题不难,一开始理解错了题意以为是一次跳跃的长度,还震惊怎么可能这么简单,后来发现果然是看错题了。最长的跳跃长度,大于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;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容