LeetCode-55-跳跃游戏
/*自顶向下的动态规划*/
#include<iostream>
using namespace std;
int *mark;//标记数组,表示mark[i]是否可以到达最后一个节点,是为1,否为-1
int min(int a, int b){
return a < b ? a : b;
}
bool dfs(int *nums, int p,int len){
if (mark[p] != 0){
return mark[p] == 1 ? true : false;
}
int bigjump = min(nums[p] + p, len - 1);//可以跳到的下一个节点的下标最大值
for (int next = p+1; next <= bigjump; next++){//next是下一个节点
if (dfs(nums, next, len) == true){
mark[next] = 1;
return true;
}
}
mark[p] = -1;//否则p不可以跳到结尾
return false;
}
int main(){
int nums[5] = { 3, 2, 1, 0, 4 };
int len = sizeof(nums) / sizeof(nums[0]);
mark = new int[len];
for (int i = 0; i < len; i++){
mark[i] = 0;
}
mark[len - 1] = 1;//最后一个节点是一定可以跳到最后一个节点
if (dfs(nums, 0, len)){
cout << "true" << endl;
}
else{
cout << "false" << endl;
}
return 0;
}