- class Solution:
- def jump(self, nums: List[int]) -> int:
- l=len(nums)-1
- if l==0:
- return 0
- max_reach=0
- r=0
- flag=0
- for i in range(len(nums)):
- max_reach=max(max_reach,nums[i]+i)
- if i==r:
- r=max_reach
- flag+=1
- if r>=l:
- break
- 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
。