
这道题不在于每次该跳几格,而在于求能达到范围内每个位置能覆盖到的最远距离。
例如示例1,在Index=0时,覆盖两格,那么我们此时只能走1或者2步。我们开始遍历,走1的时候,1+nums[1]=4直接可以覆盖整个数组,所以满足了。
例如示例2,Index=0时,覆盖三格,那么我们只能走1,2或者3。走1的时候最大范围为1+2,不满足。2的时候最大范围为2+1,不满足,走三的时候3+0不满足。此时已经到达我们可以到达的最大位置,无法移动,循环结束返回false。
代码如下:
cpp
class Solution {
public:
bool canJump(vector<int>& nums) {
int maxIndex=nums[0];
for(int i=0;i<=maxIndex;++i)
{
int curIndex=i+nums[i];
maxIndex=max(maxIndex,curIndex);
if(maxIndex>=nums.size()-1) return true;
}
return false;
}
};