这一题被我和前面一题“几步可以从头跳到尾”思路混淆了,道理上说两个题目表达的意思是一样的,但是不知怎么滴我都转不出来了,按照前面的思路写出来的程序如下:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return bool布尔型
*/
bool canJump(vector<int>& nums) {
// write code here
int n=nums.size();
vector<bool> dp(n,false);
dp[0]=true;
int j=0;
for(int i=1;i<n;i++)
{
while(j<n && j+nums[j]<i) j++;
if(j==n-1)
break;
dp[i]=true;
}
return dp[n-1];
}
};
重点在于最后一个测试用例(1,1,1,1,1,1,1~~~~~~~)
后来看了题解,一种很简单清新的思路和程序:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return bool布尔型
*/
bool canJump(vector<int>& nums) {
// write code here 主要就围着nums[i]+i转 能走就走,不能走就停滞
int x=nums[0];
for(int i=0;i<=x;++i){
if(nums[i]+i>=nums.size()-1) return true;
x=max(x,nums[i]+i);
}
return false;
}
};