思路:一个简单的dfs+状态记录(代码中写bfs是错误的)不论怎么跳到某一格,那一格能否到终点是固定的,由此减少很多时间复杂度。
代码:
class Solution {
public:
vector <bool> ifFail;
int l;
queue <int> steps;
vector<int> num;
bool canJump(vector<int>& nums) {
l = nums.size();
for(int i = 0; i < l; i++){
ifFail.push_back(false);
}
num = nums;
return bfs(0);
}
bool bfs(int index){
if(ifFail[index]){
return false;
}
if(index >= l){
ifFail[index] = true;
return false;
}
if(index == l - 1){
return true;
}
int power = num[index];
for(int i = 1; i <= power; i++){
if(bfs(index + i)){
return true;
}
}
ifFail[index] = true;
return false;
}
};