79 單詞搜尋

2021-10-24 19:40:16 字數 1317 閱讀 7091

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

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

示例:board =

[['a','b','c','e'],

['s','f','c','s'],

['a','d','e','e']

]給定 word = "abcced", 返回 true

給定 word = "see", 返回 true

給定 word = "abcb", 返回 false

分析:這裡可以使用回溯,包含dfs+狀態重置

寫了兩種回溯演算法,

1:純暴力遞迴,然後回溯

public boolean exist(char board, string word) }}

return false;

}private boolean search(char board, string word, int i, int j, int len)

2:含有狀態陣列,比較穩

/**

* 老回溯演算法,dfs+狀態重置

* @param board

* @param word

* @return

*/private boolean marked;//做標記

private int direction = , , , };

private int m;//行

private int n;//列

private char board;

private string word;

public boolean exist(char board, string word)

n = board[0].length;

marked = new boolean[m][n];

this.word = word ;

this.board = board;

for (int i = 0; i < m; i++) }}

return false;

}private boolean dfs(int i, int j, int start)

if(board[i][j] == word.charat(start))}}

marked[i][j] = false;

}return false;

}private boolean inarea(int x, int y)

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