题目简述:
给定一个数组,判断是否能够到达最后一个节点。跳跃规则:每次最多只能跳跃不超过其值。
以下是两种方法,回溯法会超时。
class Solution {
public:
//Time Limit Exceed
/*
int jumpEnd(vector<int>& nums,bool& res,int level){
if (level == nums.size()-1){
res = true;
return 0;
}
for (int i=1;i<= nums[level];++i){
if (level+i>=nums.size()-1){
res = true;
return 0;
}
jumpEnd(nums,res,level+i);
if (res)return 0;
}
return 0;
}
bool canJump(vector<int>& nums) {
bool res=false;
int ret = jumpEnd(nums,res,0);
return res;
}
*/
bool canJump(vector<int>& nums){
vector<bool> flag(nums.size(),false);
flag[0] = true;
for(int i=0;i<nums.size();++i){
if(flag[i]==false)return false;
for (int offset=1;offset<=nums[i];++offset){
if(i+offset<nums.size()){
flag[i+offset] = true;
}
}
}
return true;
}
};
网友评论