
分析:例 nums=[5,3,2,0,8,10]
1 .建立dp[]数组,里面记录可以跳的最远的格子
i 表示格子:第 0 格 ,第 1 格,第 2 格,......,第 nums.length-1 格
dp[0] = i + nums[i] = 0 + 5 = 5,即在i = 0 处最远可以跳到 i=5的格子
dp[1] = i + nums[i] = 1 + 3 = 4,即在i = 1 处最远可以跳到 i=4的格子
dp[1]只可以跳到i = 4,而dp[0]可以跳到i=5 很明显 dp[0] > dp[1]
(我在 1 格子都没有上一个 0 格子跳得远,所以我肯定最后选择在 0 格子跳,而不是 1 格子跳)
2. 即,考虑到状态转移方程,所以dp[1] = max(dp[0],1+nums[1]) = max(5,4) = 5
dp[i] = max(dp[i-1],i+nums[i])
3. 最重要的! 最重要的! 最重要的! 最重要的!,还要考虑到能到达我现在的格子吗?,如果到不了的话就表示到不了最后的格子,因为 dp[5] >=dp[4]>=dp[3].....>=dp[0]。
例如 nums = [1,0,2,3] , dp[0] = 1 ,dp[1] = max(dp[0], nums[1] + 0) = 1,这样子看来不管是dp[0],还是dp[1] 都到不了
LeetCode跳跃游戏的动态规划解法

本文详细解析LeetCode热门题目55 - 跳跃游戏的动态规划解法,通过示例解释状态转移方程,强调在计算过程中必须考虑能否到达当前格子的重要性。
最低0.47元/天 解锁文章
2275

被折叠的 条评论
为什么被折叠?



