思路:
1. 矩陣搜尋,沒有規定起始位置與終止位置的時間複雜度是 o(row*col*3^k)因為要遍歷每乙個位置作為起始節點,由於不能訪問visited,所以每一步都只有3個選擇,然後最差情況走完k-1步發現不匹配
2. visited細節
1)visited 用set,而不新建乙個borad或在原board上修改,只要使用 (r,c) in set 判斷只需要o(1)
2)visited是新增座標,而不是board[r][c]的值,因為visited是用來實現不走回頭路
3) 我們是在每一步dfs開頭新增當前座標進 visited,而不是新增下一步的
3. 遞迴細節:
1) 每次dfs開頭的判斷返回值都是 判斷遞迴到最底層後的返回值,如
a.返回葉子節點的空節點 return none
b.返回乙個空的列表
c.返回true or false
2) 底層的dfs還需要有變數去接受,這樣才能傳回外層函式
a. root.left = dfs() root.right = dfs()
b. reslist = dfs() + [curval]
c. if dfs() : return true
3) 通過這樣的方式,遞迴結果才一層一層的傳遞到外層函式
a. 獲得了一二叉樹
b. 獲得了乙個列表
c. 得到了true or flase
劍指offer12 矩陣中的路徑
設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某個字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。利用回溯法的思想,除矩陣邊界上的格仔外,其它格仔都有四個相鄰的格仔,當矩陣中座標為 ro...
矩陣中的路徑(劍指offer 12)
設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某個字串所有字元的路徑,路徑可以從矩陣中任意一格開始,每一步可以在矩陣中向左 右 上 下各移動一格,如果一條路徑經過了矩陣中的某一格,那麼該路徑不能再次進入該格仔。例下 3 x 4的矩陣中包含一條字串 bfce 的路徑,但是矩陣中不包含 abfb 路...
劍指offer 12 矩陣中的路徑
判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向上下左右移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。public class solution,private int rows private int c...