给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
方法一:反向贪心
class Solution {
public:
bool canJump(vector<int>& nums) {
if(nums.empty())
return false;
int destination = nums.size()-1;
for(int i =destination-1;i>=0;i--)
{
if((i+nums[i])>=destination)
destination=i;
}
return destination==0;
}
};
方法二:反向贪心
class Solution {
public:
bool canJump(vector<int>& nums) {
int destination =0;
for(int i =0;i<nums.size();i++)
{
if(i>destination)
return false;
destination=max(i+nums[i],destination);
}
return true;
}
};
方法三:找零
class Solution {
public:
bool judgeFunction(vector<int>& nums,int zero)
{
for(int i =zero-1;i>=0;i--)
{
if((i+nums[i])>zero)
return true;
}
return false;
}
bool canJump(vector<int>& nums) {
int zero = 0;
if(nums.size()==1&&nums[0]==0)
return true;
for(int i =0;i<nums.size()-1;i++)
{
if(nums[i]==0)
{
zero = i;
if(!judgeFunction(nums,zero))
return false;
}
}
return true;
}
};