1306. Jump Game III
两种DFS解法,为避免重复的递归搜素,都加入了visited避免访问过得重复访问,注意看两种标记方法的不同。
1:
class Solution:
def canReach(self, arr: List[int], start: int) -> bool:
size = len(arr)
visited = [0] * size
def trackback(index):
if arr[index] == 0:
return True
if index + arr[index] < size and visited[index+arr[index]] == 0:
visited[index+arr[index]] = 1
if trackback(index+arr[index]):
return True
if index - arr[index] > -1 and visited[index-arr[index]] == 0:
visited[index - arr[index]] = 1
if trackback(index - arr[index]):
return True
return False
visited[start] = 1
return trackback(start)
2:
class Solution:
def canReach(self, arr: List[int], start: int) -> bool:
size = len(arr)
visited = [[0]*2 for _ in range(size)] # visited[index][0]代表从index向左跳,visited[index][1]代表从index向右跳
def trackback(index):
if arr[index] == 0:
return True
if index + arr[index] < size and visited[index][1] == 0:
visited[index][1] = 1
if trackback(index+arr[index]):
return True
if index - arr[index] > -1 and visited[index][0] == 0:
visited[index][0] = 1
if trackback(index - arr[index]):
return True
return False
return trackback(start)