动态规划实在让人上瘾啊,虽然过程很难想,但是代码实现实在太简单了。
int max(int i,int j){
if(i>j ) return i;
return j;
}
bool canJump(int* nums, int numsSize) {
if(numsSize==1 && nums[0]>=0) return true;
if(nums[0]==0) return false;
int* dp=(int*)malloc(sizeof(int)*numsSize);//dp[i]加入了第i跳板个可选择跳
dp[0]=nums[0];
for(int i=1;i<numsSize;i++){
if(dp[i-1]>=i){
dp[i]=max(dp[i-1],i+nums[i]);
}else{
dp[i]=dp[i-1];
}
if(dp[i]>=numsSize-1) return true;
}
return false;
}
结果: