leetcode 55:跳跃游戏

leetcode 55:跳跃游戏_第1张图片

首先,如果数字只有一个元素,那么必定为true

然后从后往前遍历数组,如果最后一个元素是0,则它前面的元素的值只要有一个大于等于离0的距离,则这个0是合法的,比如

2 0 0,最后一个元素前面的2的值是等于到最后一个0的距离的,所以最后一个0合法;对于不是最后一个元素是0的元素,查看它前面的元素的值是否大于到这个0的距离,只要有一个大于到该0的距离,则合法,比如2 0 0,2后面0,2到这个0的距离是1 所以2>1 这个0合法,而3 2 1 0 4来说,0前面元素的值都刚好等于到0的距离,所以这个0不合法,返回false

bool canJump(std::vector& nums) {
    if(nums.size()==1)
        return true;
    int i=nums.size()-1;
    while(i>=0){
        if(nums[i]!=0)
            i--;
        else{
            int c=1;
            int j=i-1;
            for(;j>=0;j--){
                if(nums[j]>c){
                    i--;
                    break;
                }else if(i==nums.size()-1&&nums[j]==c){
                    i--;
                    break;
                }
                c++;
            }
            if(j==-1)
                return false;
        }
    }
    return true;
}

 

你可能感兴趣的:(leetcode)