劍指Offer 12 矩陣中的路徑(JS實現)

2021-10-10 04:14:42 字數 2629 閱讀 9182

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的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

示例 2:

輸入:board = [["a","b"],["c","d"]], word = "abcd"

輸出:false

var

exist

=function

(board, word)

var rows = board.length;

var cols = board[0]

.length;

var visited =

newboolean

(rows*cols)

;var pathindex =0;

for(

var i=

0;ifor(

var i=

0;i}return

false;}

;// 關鍵函式

varhaspathcore

=function

(rows,cols,row,col,board,word,pathindex,visited)

if(row>=

0&& row =

0&& col== word[pathindex])}

return haspath;

}

問題一:輸出undefined

原因:主程式中未判斷如果不存在路徑時,輸出false。

間接說明,haspathcore函式存在問題,未按預期輸出true。

對於寫法board[row*cols+col],js不支援,會輸出undefined。

修改:

var visited =

newarray()

;for

(var i=

0;i)}

測試用例不通過:

[['a','a']]

'aaa'

預期輸出false,測試輸出true。

原因:在判斷矩陣元素匹配所給字串元素時,未判斷是否已經訪問過。

修改:增加判斷條件

if

(row>=

0&& row =

0&& col[col]

== word[pathindex]

&& visited[row]

[col]

==false

)

var

exist

=function

(board, word)

var rows = board.length;

var cols = board[0]

.length;

var visited =

newarray()

;var pathindex =0;

for(

var i=

0;ifor(

var i=

0;i}return

false;}

;// 關鍵函式

varhaspathcore

=function

(rows,cols,row,col,board,word,pathindex,visited)

if(row>=

0&& row =

0&& col[col]

== word[pathindex]

&& visited[row]

[col]

==false)}

return haspath;

}

js的二維陣列初始化

示例一:

var arr =[[

1,2]

,['a',

'b']

];

示例二:

var arr =

newarray

(new

array(1

,2),

newarray

("a"

,"b"))

;

示例三:

var arr =

newarray()

;for

(var i=

0;i)}

劍指offer12 矩陣中的路徑

設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某個字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。利用回溯法的思想,除矩陣邊界上的格仔外,其它格仔都有四個相鄰的格仔,當矩陣中座標為 ro...

矩陣中的路徑(劍指offer 12)

設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某個字串所有字元的路徑,路徑可以從矩陣中任意一格開始,每一步可以在矩陣中向左 右 上 下各移動一格,如果一條路徑經過了矩陣中的某一格,那麼該路徑不能再次進入該格仔。例下 3 x 4的矩陣中包含一條字串 bfce 的路徑,但是矩陣中不包含 abfb 路...

劍指offer 12 矩陣中的路徑

判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向上下左右移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。public class solution,private int rows private int c...