給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。
示例:回溯演算法。用乙個相同大下的陣列儲存是否訪問過當前元素。(也可以用原陣列做儲存,減少空間複雜度)board =
[[『a』,『b』,『c』,『e』],
[『s』,『f』,『c』,『s』],
[『a』,『d』,『e』,『e』]
]給定 word = 「abcced」, 返回 true.
給定 word = 「see」, 返回 true.
給定 word = 「abcb」, 返回 false.
public
boolean
exist
(char
board, string word)
char
chars = word.
tochararray()
;int row = board.length;
int col = board[0]
.length;
int[
] memo =
newint
[row]
[col]
;for
(int i =
0; i < row; i++)}
}return
false;}
public
boolean
process
(char
board,
char
chars,
int index,
int i,
int j,
int row,
int col,
int[
] memo)
if(i <
0|| i >= row || j <
0|| j >= col || memo[i]
[j]!=
0|| chars[index]
!= board[i]
[j])
memo[i]
[j]=1;
boolean result =
process
(board, chars, index +
1, i -
1, j, row, col, memo)
||process
(board, chars, index +
1, i +
1, j, row, col, memo)
||process
(board, chars, index +
1, i, j -
1, row, col, memo)
||process
(board, chars, index +
1, i, j +
1, row, col, memo)
; memo[i]
[j]=0;
return result;
}
79 單詞搜尋
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回t...
79 單詞搜尋
不允許重複使用字母 seen 0for i in range n for j in range m for i in range m for j in range n if self.search board,word,0,i,j,seen return true return false word...
79 單詞搜尋
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...