反思:传参数的时候要注意参数是否对了,比如数组的注意是否从0开始的!!坑自己。。。
思路:暴力搜索就好。为了防止重复搜索,把得到的结果储存到一个数组里面去。
class Solution {
public:
int jump(int A[], int n) {
if(A == nullptr || n <= 0)
return 0;
long long * f = new long long [n + 10];//储存结果
bool * mark = new bool[n + 10];//标记是否已经求解了
for(int i = 0; i < n + 10; i++){
mark[i] = false;//初始化为未找到解
}
long long res = solve(A, f, mark, 0, n - 1);
return res;
}
//now 表示当前位置, end表示终点
long long solve(int * A, long long * f, bool * mark, int now, int end){
long long res = INT_MAX;
if(now == end){//刚好是终点不用走
f[now] = 0;
mark[now] = true;
return 0;
}
if(now > end)//越界了
return res;
if(A[now] == 0){//最大步数是0, 原点跑跑不到终点
f[now] = res;
mark[now] = true;
return res;
}
for(int i = 1; i <= A[now ]; i++){//枚举走的步伐
if(!mark[now + i]){//now+i阶梯到终点最小步数的解没有求出来
f[now+i] = solve(A, f, mark, now+i, end) ;
mark[now + i] = true;
}
res = res < (f[now + i] +1 )? res : (f[now + i]+1);
}
mark[now] = true;
return f[now] = res;
}
};