leetcode 面試題12 矩陣中的路徑

2021-10-04 21:53:03 字數 1748 閱讀 1192

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3×4的矩陣中包含一條字串「bfce」的路徑(路徑中的字母用加粗標出)。

[[「a」,「b」,「c」,「e」],

[「s」,「f」,「c」,「s」],

[「a」,「d」,「e」,「e」]]

但矩陣中不包含字串「abfb」的路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入這個格仔。

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 的路徑 路徑中的字母用下劃線標出 但...