leetcode
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。
輸入:board = [[「a」,「b」,「c」,「e」],[「s」,「f」,「c」,「s」],[「a」,「d」,「e」,「e」]], word = 「abcced」考慮用深度優先搜尋dfs輸出:true
遞迴終止條件:座標超出邊界值或者當前值與所求字串值不符合或者當前座標已經訪問過
對於已經搜尋過的座標,如果想不重複,可以將其修改為特殊符號,使之與字串無法匹配
遞迴方式:對當前座標向左向右向上向下進行搜尋
class
solution
:def
exist
(self, board: list[list[
str]
], word:
str)
->
bool:if
not word:
return
true
res =
path =
"" visited =
set(
)def
dfs(i,j,k)
:if i>
len(board)-1
or j>
len(board[0]
)-1or i<
0or j<
0or word[k]
!=board[i]
[j]:
return
false
if k==
len(word)-1
:return
true
visited.add(
(i,j)
) k+=
1 tmp , board[i]
[j]= board[i]
[j],
'/' res = dfs(i,j+
1,k)
or dfs(i,j-
1,k)
or dfs(i-
1,j,k)
or dfs(i+
1,j,k)
board[i]
[j]= tmp
return res
for i in
range
(len
(board)):
for j in
range
(len
(board[0]
)):if dfs(i,j,0)
:return
true
return
false
class
solution
:def
exist
(self, board: list[list[
str]
], word:
str)
->
bool:if
not word:
return
true
visited =[[
0]*len
(board[0]
)for _ in
range
(len
(board))]
defhelper
(i,j,visited,word):if
not word:
return
true
res =
false
if i>=
0and i<
len(board)
and j>=
0and j<
len(board[0]
)and board[i]
[j]==word[0]
and visited[i]
[j]==0:
visited[i]
[j]=
1 res = helper(i+
1,j,visited,word[1:
])or helper(i-
1,j,visited,word[1:
])or helper(i,j+
1,visited,word[1:
])or helper(i,j-
1,visited,word[1:
])ifnot res:
visited[i]
[j]=
0return res
for i in
range
(len
(board)):
for j in
range
(len
(board[0]
)):if helper(i,j,visited,word)
:return
true
return
false
LeetCode 回溯 矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字母用加粗標出 a ...
刷leetcode 10 矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字母用加粗標出 a ...
矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 3 4 矩陣 a b c e s f c s a d e e 中包...