刷leetcode 10 矩陣中的路徑

2021-10-12 04:54:27 字數 1442 閱讀 1472

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

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

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

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

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

示例 1:

輸入:board = [[「a」,「b」,「c」,「e」],[「s」,「f」,「c」,「s」],[「a」,「d」,「e」,「e」]], word = 「abcced」

輸出:true

得多練習(●』◡』●)

看leetcode精選題解

遞迴。每次檢索到乙個元素時,向下向上向右向左檢視它的周圍有無符合的元素(但其實只會檢視3個方向。因為已經經過的元素不能被再次訪問了)。

注意遞迴結束條件的設定:1.檢索的下標越界 2.沒有匹配的元素 3.匹配成功(設定k值)

class

solution}}

return

false;}

//遞迴方法

boolean

dfs(

char

board,

char

wordarr,

int i,

int j,

int k)

//2.結束條件:成功判斷

//k從0開始。當k=wordarr.length-1時,說明字串匹配完畢

if(k == wordarr.length-1)

//3.標記正在遍歷的元素,防止後來再被檢索到

board[i]

[j]=

'\0'

;//4.開始往下檢索

boolean flag =

dfs(board,wordarr,i+

1,j,k+1)

//向下

||dfs

(board,wordarr,i-

1,j,k+1)

//向上

||dfs

(board,wordarr,i,j+

1,k+1)

//向右

||dfs

(board,wordarr,i,j-

1,k+1)

;//向左

//4.檢索完後還原被標記的元素

board[i]

[j]= wordarr[k]

;return flag;

}}

時間複雜度:o(3^k mn):遍歷完整個字串需要o(3 ^k)。矩陣起點數共有mn個

空間複雜度:遞迴。o(mn)

leetcode 10 模式匹配

可以用動態規劃來做,dp i j 表示s的前i個字串能否被p的前j個字串所匹配。當s i p j p j 時 dp i j dp i 1 j 1 顯而易見 p j 時,1.s i p j 1 這就意味著此時 只能匹配0次 dp i j dp i j 2 2.s i s i p j 1 意味著 可以代...

LeetCode10 正規表示式

給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素 所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例...

leetcode 10 羅馬數字轉整數

difficulty 簡單 羅馬數字包含以下七種字元 i,v,x,l,c,d和m。字元 數值 i 1 v 5 x 10 l 50 c 100 d 500 m 1000例如,羅馬數字 2 寫做ii,即為兩個並列的 1。12 寫做xii,即為x ii。27 寫做xxvii,即為xx v ii。通常情況下...