题目:45. Jump Game II
题目描述:https://leetcode.com/problems/jump-game-ii/description/
给定一个非负整数序列,位置index的数字代表可以向右最多走nums[index]步,起点位置是0,计算走到最右端点至少需要多少步(假设一定可以走到终点)?
用bfs可能更好写一点,使用一个数组res[]来维护最小步数,最终返回res[length-1]即可。只不过效率有点低,最后AC的代码运行时间排在倒数3%
Python:
import Queue
class Solution(object):
def jump(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
inf=0x7fffffff
length=len(nums)
if length<=1:
return 0
if nums[0]>=length-1:
return 1
if nums[0]==length-2:
return 2
res=[]
for i in range(length):
res.append(inf)
def bfs(nums,start):
que=Queue.Queue()
que.put((nums[start],start))
res[start]=0
while not que.empty():
front=que.get()
# print(front)
if front[1]+front[0]>=length-1 and res[length-1]!=inf:
break
if front[1]+front[0]<length and res[front[1]+front[0]]!=inf:
continue
for k in range(front[0]):
next=front[1]+k+1
if next<length:
if res[next]==inf:
que.put((nums[next],next))
res[next]=min(res[next],res[front[1]]+1)
return res[length-1]
return bfs(nums,0)