45.跳跃游戏 II
题目来源:
leetcode题目,网址:45. 跳跃游戏 II - 力扣(LeetCode)
解题思路:
用数组记录到达当前节点最小步数。遍历数组时,根据当前节点的值和到当前节点的最小步数得到从当前节点出发到各可达节点的最小步数,若其值小于到各可达节点节点的最小步数,更新最小步数数组。
解题代码:
#python3
class Solution:
def jump(self, nums: List[int]) -> int:
cnt=[len(nums)+1]*len(nums)
cnt[0]=0
for i in range(len(nums)):
for j in range(nums[i]+1):
if i+j<len(nums):
cnt[i+j]=min(cnt[i]+1,cnt[i+j])
return cnt[len(nums)-1]
总结:
官方题解给出了贪心正向和贪心反向两种解法。
贪心正向得到每一步所能走出的最大距离,当该距离大于等于数组长度时即为所求。
贪心反向以到目的地的最远位置为一步,确定一步后以当前位置为新的目的地直至到达数组起点。