Leetcode-79. Word Search

公众号每天发布一篇关于Leetcode解题技巧的文章,尝试从多角度、不同方法对题目进行解析。欢迎大家关注!

题目描述(中等难度)

Leetcode-79. Word Search_第1张图片
意思就是从某个字符出发,然后它可以向左向右向上向下移动,走过的路径构成一个字符串,判断是否能走出给定字符串的 word ,还有一个条件就是走过的字符不能够走第二次。

比如 SEE,从第二行最后一列的 S 出发,向下移动,再向左移动,就走出了 SEE。

ABCB,从第一行第一列的 A 出发,向右移动,再向右移动,到达 C 以后,不能向左移动回到 B ,并且也没有其他的路径走出 ABCB 所以返回 false。

解法一 DFS

我们可以把矩阵看做一个图,然后利用图的深度优先遍历 DFS 的思想就可以了.
Leetcode-79. Word Search_第2张图片

package DFS_Word_Search;

public class DFS_Word_Search {
	
	public static boolean exist(char[][]board,String word) {
		int rows=board.length;
		if(rows==0) {
			return false;
		}
		int cols=board[0].length;
		boolean[][] visited=new boolean[rows][cols];//默认元素皆为false
		//从不同位置开始
		for(int i=0;i<rows;i++) {
			for(int j=0;j<cols;j++) {
				//从当前位置开始符合就返回true
				if(existRecursive(board,i,j,word,0,visited)) {
					return true;
				}
			}
		}
		return false;
	}

	private static boolean existRecursive(char[][] board, int row, int col, String word, int index, boolean[][] visited) {
		// 判断是否越界
		if(row<0 || row>=board.length ||col<0 || col>=board[0].length) {
			return false;
		}
		//当前元素访问过或者和当前word不匹配返回false
		if(visited[row][col]||board[row][col]!=word.charAt(index)) {
			return false;
		}
		//已经匹配到了最后一个单词,返回true
		if(index==word.length()-1) return true;
		//将当前位置标记已经访问
		visited[row][col]=true;
		//对四个位置分别进行尝试
		boolean up=existRecursive(board,row-1,col,word,index+1,visited);
		if(up) return true;
		boolean down = existRecursive(board, row + 1, col, word, index + 1, visited);
		if (down) return true;
		boolean left = existRecursive(board, row, col - 1, word, index + 1, visited);
		if (left) return true;
	    boolean right = existRecursive(board, row, col + 1, word, index + 1, visited);
		if (right) return true;
		//当前位置没有选进来,恢复标记为false
		visited[row][col]=false;
		return false;
	}
	public static void main(String args[]) {
		char[][] board= {{'A','B','C','E'},{'S','F','C','S'},{'A','D','E','E'}};
		String word="ABCCED";
		//String word="SEE";
		boolean ans=exist(board,word);
		System.out.println(ans);
	}
}

你可能感兴趣的:(LeetCode)