79. 单词搜索 & 面试题12. 矩阵中的路径

79. 单词搜索

面试题12. 矩阵中的路径

两个题一样

DFS,黄金矿工是找深搜求和,更新最大值,这个题是深搜更新状态,如果满足状态继续深搜,不满足状态返回false,这条路线就不再走了,只要有一条路线符合要求,主方法中的dfs返回值就是true了。

ps:不用按单词中的顺序DFS,只要网格中的一条合法字符串包含着单词就可以。

class Solution {
	int res = Integer.MIN_VALUE;
	int[][] dir = new int[][] { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } };
	int r;
	int c;
	boolean[][] vis;

	public boolean exist(char[][] board, String word) {
		r = board.length;
		c = board[0].length;
        vis = new boolean[r][c];
		for (int i = 0; i < r; i++) {
			for (int j = 0; j < c; j++) {
				if (board[i][j] == word.charAt(0)) {
					vis[i][j] = true;
					if (dfs(i, j, 1, word, board))
						return true;
					vis[i][j] = false;
				}
			}
		}
		return false;
	}

	public boolean dfs(int i, int j, int cursize, String word, char[][] board) {
		if (cursize == word.length())
			return true;
		for (int[] d : dir) {
			int newx = i + d[0];
			int newy = j + d[1];
			if (newx >= 0 && newx < r && newy >= 0 && newy < c && vis[newx][newy] == false) {// 在界内且未被访问
				if (board[newx][newy] != word.charAt(cursize))
					continue;
				vis[newx][newy] = true;
				if (dfs(newx, newy, cursize + 1, word, board))
					return true;
				vis[newx][newy] = false;
			}
		}
		return false;
	}
}
发布了56 篇原创文章 · 获赞 4 · 访问量 1671

猜你喜欢

转载自blog.csdn.net/qq_41342326/article/details/104277574