这题是一个动态规划问题,首先我先说一下自己的动态规划解题步骤:
1,首先需要明确动态规划数组的含义:这个是根据题目来定的,这一个题目的数组含义:dp【i】指的是从0跳到i所需要的最小的步骤。
2,分析状态,确定动态规划转移方程:dp[i]可以有i之前的位置j且(num[j] > i - j)转移过来,因可以写出代码。
Python:
class Solution:def jump(self, nums: List[int]) -> int:n = len(nums)dp = [1000000] * 100005dp[0] = 0for i in range(n):for j in range(nums[i] + 1):dp[i + j] = min(dp[i + j], dp[i] + 1)return dp[n - 1]
C++:
class Solution {
public:int jump(vector<int>& nums) {int n = nums.size();vector<int> dp(1000005);//表示跳到第i个位置的时候需要的最小步数for(int i = 0; i < n ; i ++){dp[i] = 1000000;}dp[0] = 0;for(int i = 0; i < n ;i ++){for(int j = 0; j <= nums[i]; j ++){dp[i + j] = min(dp[i + j], dp[i] + 1);}}return dp[n - 1];}
};
讲的可能不太好(因为自己动态规划也不太好!)
加油!!!