【leetcode27】

45. 跳跃游戏 II

  1. class Solution:
  2.     def jump(self, nums: List[int]) -> int:
  3.         l=len(nums)-1
  4.         if l==0:
  5.             return 0
  6.         max_reach=0
  7.         r=0
  8.         flag=0
  9.         for i in range(len(nums)):
  10.             max_reach=max(max_reach,nums[i]+i)
  11.             if i==r:
  12.                 r=max_reach
  13.                 flag+=1
  14.                 if r>=l:
  15.                     break
  16.         return flag

比昨天的题多考虑一下r边界值

通义解释:

为什么 jump 方法需要 end

  • 记录当前跳跃范围的边界end 用于记录当前跳跃能到达的最远位置。当 i 达到 end 时,表示当前跳跃范围内的所有位置都已遍历完毕,需要进行下一次跳跃。
  • 更新跳跃范围:每次跳跃后,更新 end 为 maxPos,表示新的跳跃范围。
  • 增加跳跃次数:每次跳跃后,增加 step,记录跳跃次数。

为什么 canJump 方法不需要 end

  • 简化逻辑canJump 方法只需要判断是否可以到达末尾,不需要记录每次跳跃的具体位置和次数。
  • 直接判断:通过 ma 记录当前能到达的最远位置,当 i 大于 ma 时,表示无法继续前进,返回 False。当 ma 大于或等于 l 时,表示可以到达末尾,返回 True

总结

  • jump 方法:需要记录每次跳跃的具体位置和次数,因此需要 end 来记录当前跳跃范围的边界。
  • canJump 方法:只需要判断是否可以到达末尾,不需要记录每次跳跃的具体位置和次数,因此不需要 end

发表评论