题目的链接在这里:https://leetcode-cn.com/problems/jump-game-ii/
题目大意
给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
假设你总是可以到达数组的最后一个位置。
一、示意图
二、解题思路
动态规划
动态规划
代码如下:
class Solution {
public int jump(int[] nums) {
//这里就变成了 不管怎么样都是能到最后的位置的 但是是需要最少的跳跃次数
//还是从后往前吗
int[] dp=new int[nums.length];
//dp[i]表示到这个位置的最少跳跃次数 他就是 dp[i]之前的位置 加一 一下子列举出来就行 判断哪个位置只要大于就可以
dp[0]=0;
for(int i=1;i<nums.length;i++){
//这里开始判断
int min=6000;
for(int j=i-1;j>=0;j--){
//就从后往前判断 首先需要判断这个位置能跳到对应的i点
if(nums[j]>=(i-j)){
//说明可以跳到 那就找最小值
min=Math.min(min,dp[j]+1);
}
}
dp[i]=min;
}
//然后就返回最后的
return dp[nums.length-1];
}
}