枚举出所有到达终点的情况 最终超时了
class Solution {
private:
int minstep=INT_MAX;
void dfs(vector<int>&nums,int index,int cstep)
{
if(index<nums.size()-1)//没有到达终点则枚举出下一步所有可能的步长
{
for(int i=1;i<=nums[index];i++)
{
dfs(nums,index+i,cstep+1);
}
}else if(index==nums.size()-1)//到了终点 则更新最小的步数
{
minstep=min(minstep,cstep);
}
}
public:
int jump(vector<int>& nums) {
dfs(nums,0,0);
return minstep;
}
};
最终的解法
class Solution {
public:
int jump(vector<int>& nums) {
int level=-1;
int currentmax=0;
int nextmax=0;
int i=0;
int n=nums.size();
while(i<=currentmax&&i<n)
{
level++;
nextmax=currentmax;
for(;i<=currentmax&&i<n;i++)
{
nextmax=max(nextmax,nums[i]+i);
if(i>=n-1)
return level;
}
currentmax=nextmax;
}
return 0;
}
};