leetcode题解(三十四):79. Word Search

在二维数组中找单词

Example:
board =
[
[‘A’,‘B’,‘C’,‘E’],
[‘S’,‘F’,‘C’,‘S’],
[‘A’,‘D’,‘E’,‘E’]
]

Given word = “ABCCED”, return true.
Given word = “SEE”, return true.
Given word = “ABCB”, return false.

public boolean exist(char[][] board, String word) {
    char[] w = word.toCharArray();
    for (int y=0; y<board.length; y++) {
    	for (int x=0; x<board[y].length; x++) {
    		if (exist(board, y, x, w, 0)) return true;
    	}
    }
    return false;
}

private boolean exist(char[][] board, int y, int x, char[] word, int i) {
	//找到单词,返回
	if (i == word.length) return true;
	//超出边界,return false
	if (y<0 || x<0 || y == board.length || x == board[y].length) return false;
	//如果不是当前的字母,return false
	if (board[y][x] != word[i]) return false;
	//是当前字母,继续往下搜索,先把当前字母遮起来
	board[y][x] ^= 256;
	boolean exist = exist(board, y, x+1, word, i+1)
		|| exist(board, y, x-1, word, i+1)
		|| exist(board, y+1, x, word, i+1)
		|| exist(board, y-1, x, word, i+1);
	//搜索过后再还原
	board[y][x] ^= 256;
	return exist;
}

Bit Mask。所以将当前元素 XOR 256会得到将当前的元素遮盖起来(即得到一个非字母字符的表示),注意在搜索过后,需要将被遮盖的元素重新恢复过来,从而不影响下一次的重新搜索,这时候只要再进行一次 XOR 256即可。

猜你喜欢

转载自blog.csdn.net/weixin_43869024/article/details/89470571