思路:
1、结束条件:当前能走的步数大于等于到终点的步数。
2、若不能从当前直接到达终点,那么我们要选择下一跳的位置。选择下一跳的时候,用贪心的算法——选择当前点可达范围内的可以走得最远的点。若此点的范围小于等于当前点的范围,则返回不可能。
3、循环直到找到结束条件的状态。
很简单。。。
bool findpos(vector<int>& a, int cur, int l) {
int steps = a[cur];
if (steps + cur >= l - 1) return true; // end
int max = 0, pos;
for (int i = 0; i <= steps; ++i) {
if (a[cur + i] - steps + i > max) {
pos = cur + i;
max = a[cur + i] - steps + i;
}
}
if (max == 0) return false;
else return findpos(a, pos, l);
}
class Solution {
public:
bool canJump(vector<int>& nums) {
return findpos(nums, 0, nums.size());
}
};