动态规划 + 特殊条件判断
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size()==0){
return -1;
}
vector<int> dp;
dp.resize(nums.size());
for(int i=0;i<nums.size();i++){
if(i==nums.size()-1){
dp[i] = 0;
}else{
dp[i] = -1;
}
}
for(int i=nums.size()-1;i>=0;i--){
for(int j=1;j<=nums[i];j++){
if(i+2<nums.size() && nums[i]-1==nums[i+1] ){
dp[i] = dp[i+1];
break;
}
if(i+j<nums.size() && dp[i+j]!=-1){
dp[i] = dp[i]==-1?dp[i+j]+1:min(dp[i],dp[i+j]+1);
}
if(i+j>=nums.size()){
break;
}
}
}
return dp[0];
}
};