45. Jump Game II
S1: 暴力递归搜索,遍历所有的可能,比较步数得到最小步数(超时)
class Solution:
def jump(self, nums: List[int]) -> int:
size = len(nums)
self.res = float("inf")
def trackback(index, steps):
# print(index)
if index >= size-1:
self.res = min(self.res, steps)
return
for i in range(nums[index],0,-1): # 在每个位置可选的跳跃步数[1,nums[index]]
trackback(index+i, steps+1)
trackback(0, 0)
return self.res
S2: 0位置开始边走边计算steps步能够跳跃到最右的位置。第一次到达最后位置的steps即为最小步数。
class Solution:
def jump(self, nums: List[int]) -> bool:
if len(nums) < 2:
return 0
maxjump, size, index = nums[0], len(nums), 0
steps, tmp = 1, maxjump # 其中maxjump代表steps步可以跳最右的位置
while maxjump < size-1 and index <= maxjump:
#print([index, maxjump])
if index+nums[index] > tmp:
tmp = index+nums[index]
if index == maxjump: # 遍历到maxjump时将其更新为steps+1步可以跳到最右的位置,步数也加1.
maxjump = tmp
steps += 1
index += 1
return steps