請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3×4的矩陣中包含一條字串「bfce」的路徑(路徑中的字母用加粗標出)。
[[「a」,「b」,「c」,「e」],但矩陣中不包含字串「abfb」的路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入這個格仔。[「s」,「f」,「c」,「s」],
[「a」,「d」,「e」,「e」]]
class
solution
:def
exist
(self, board: list[list[
str]
], word:
str)
->
bool:if
not board:
return
false
ifnot word:
return
true
rows =
len(board)
cols =
len(board[0]
) flag =[[
0for _ in
range
(cols)
]for _ in
range
(rows)
]# 用於標記是否已經檢索過
deffunc
(matrix,string,lens,nr,nc)
:# 深度優先遍歷,判斷字串是否可達
if lens ==
len(string)
:# 遞迴停止條件,當遍歷到最後乙個元素之後,就可證明字串是可大的
return
true
haspath =
falseif0
<=nr0<=nc[nc]
==string[lens]
and flag[nr]
[nc]==0
:# 當前字元是否滿足條件
flag[nr]
[nc]=1
# 如果未被檢索同時符合要求
lens+=
1# 遍歷下乙個元素
haspath = func(matrix,string,lens,nr-
1,nc)
or func(matrix,string,lens,nr+
1,nc)
or func(matrix,string,lens,nr,nc-1)
or func(matrix,string,lens,nr,nc+1)
# 使用遞迴函式
ifnot haspath:
# 如果找不到符合的字元,使用回溯
lens-=
1 flag[nr]
[nc]=0
return haspath # 字串是否可達的標誌
strs =
0for i in
range
(rows)
:for j in
range
(cols)
:if func(board,word,strs,i,j)
:return
true
return
false
LeetCode面試題 01 08 零矩陣
原題鏈結 題目 編寫一種演算法,若m n矩陣中某個元素為0,則將其所在的行與列清零。思路 遍歷第一行,若第一行存在0,記錄下來 遍歷第一列,若第一列存在0,記錄下來 遍歷矩陣中除去第一行和第一列的所有元素,若某一位置的元素為0,將該位置對應的行首元素和列首元素置為0 遍歷矩陣中除去第一行和第二列的所...
面試題12 矩陣中的路徑
題目 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有 字元的路徑。路徑可以從矩陣中任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入 該格仔。例如在下面的3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字 母用下劃線...
面試題12 矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字母用下劃線標出 但...