我已經為 Leetcode 問題撰寫了一個潛在的解決方案,但我得到了這個涉及最大遞回深度的錯誤。我真的不確定我做錯了什么。這是我嘗試撰寫的內容:
def orangesRotting(grid):
R,C = len(grid), len(grid[0])
seen = set()
min_time = 0
def fresh_search(r,c, time):
if ((r,c,time) in seen or r < 0 or c < 0 or r >= R or c >= C or grid[r][c] == 0):
return
elif grid[r][c] == 2:
seen.add((r,c,0))
elif grid[r][c] == 1:
seen.add((r,c, time 1))
fresh_search(r 1,c,time 1)
fresh_search(r-1,c,time 1)
fresh_search(r,c 1,time 1)
fresh_search(r,c-1,time 1)
for i in range(R):
for j in range(C):
if grid[i][j] == 2:
fresh_search(i,j,0)
for _,_,t in list(seen):
min_time = max(min_time,t)
return min_time
即使是簡單的輸入,例如grid = [[2,1,1], [1,1,0], [0,1,1]]
. 有問題的行總是出現在 if 陳述句中
if ((r,c,time) in seen or r < 0 or c < 0 or r >= R or c >= C or grid[r][c] == 0):
請注意,我不是在尋求解決問題的幫助,只是理解為什么我會遇到這個大規模的遞回問題。作為參考,這里是問題的鏈接。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
因此,讓我們追溯您在這里所做的事情。您遍歷整個網格,如果該單元格的值為 2,則呼叫fresh_search
該單元格。我們將從[0,0]
然后在fresh_search
您的集合中添加次數為 0 的單元格。
現在對于您呼叫的所有相鄰單元格fresh_search
,我們只看r 1
. 對于r 1
您的方法fresh_search
,將單元格添加到您的集合中,次數為 1,然后fresh_search
再次呼叫所有相鄰單元格。
接下來我們只看r-1
哪個是我們的原點,現在fresh_search
正在用這個單元格呼叫,并且看到的次數 = 2。現在這個值還沒有在集合中,因為(0,0,0) != (0,0,2)
它會將它添加到集合中并再次fresh_search
使用r 1
單元格呼叫但是現在看到的次數 = 3
依此類推,直到最大遞回。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/508408.html
標籤:递归