79單詞搜尋

2021-10-03 17:32:21 字數 1610 閱讀 1260

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。

單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。

示例:

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 返回 ...