方案一:dfs超时
class Solution {
public:
bool dfs(vector<int>& nums, int idx)
{
if (idx == (nums.size() - 1))
return true;
int dist = nums.size() - idx;
for (int i = 0; (i < nums[idx]) && (i < dist); i++) {
if (dfs(nums, idx+i+1)) {
return true;
}
}
return false;
}
bool canJump(vector<int>& nums) {
if (nums.size() == 1) {
return true;
}
for (int i = 0; (i < nums[0]) && (i < nums.size()); i++) {
if (dfs(nums, i)){
return true;
}
}
return false;
}
};
方案二:贪心
#include <iostream>
class Solution {
public:
bool canJump(vector<int>& nums) {
int maxDest = 0;
for (int i = 0; i < nums.size(); i++) {
if (maxDest >= i){
maxDest = max(maxDest, nums[i] + i); // 每次更新最远下标
}
}
if (maxDest < (nums.size()-1)) {
return false;
}
return true;
}
};