首先,如果数字只有一个元素,那么必定为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<int>& 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;
}