用贪心法做了前面两道跳跃问题后,第三道有点吃力,原来是用BFS。之前只懂概念,要用队列和used来记录,通过该题目实际锻炼一下code。题目如下:
具体python代码如下:
class Solution:
def canReach(self, arr: List[int], start: int) -> bool:
if arr[start]==0:
return True
que = collections.deque([start]) #双端队列,常用于从两端append元素
used = [start] #保存访问过的元素
while len(que)!=0:
v = que.popleft()
for t in [v-arr[v],v+arr[v]]:
if t >=0 and t<len(arr) and t not in used:
if arr[t]==0:
return True
que.append(t)
used.append(t)
return False