题目描述:给出一个数组,每个数字代表最多能走几步,从第一个元素开始,如果能走到最后一个元素则返回true,否则返回false。
解题思路:反向遍历。设置一个元素n,令其值为1,从数组的倒数第二个元素开始,如果他的值为大于等于1的值,则可以到达最后一个,继续往前遍历,判断能否从前一个位置能否到达该位置;反之如果小于1,那么就无法从这个元素到达最后一个元素。这时将n的值加1,继续往前。判断该位置的值是否大于n,大于n则说明能从该位置到达后面的某一位置。如果到达第一个元素时n为1,则说明能够找到一条路径从第一个元素到最后一个元素;如果n大于1,则说明不能到达。
class Solution {
public:
bool canJump(vector<int>& nums) {
int n = 1;
for(int i = nums.size()-2; i>=0; i--){
if(nums[i] >= n)
n = 1;
else
n++;
if(i == 0 && n > 1)
return false;
}
return true;
}
};