剑指 Offer 12. 矩阵中的路径
题目:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
解法:回溯法
思路:剪枝操作:如果某个位置的上下左右都没有当前要找的字母,则是没希望的
代码:
package offer.q12;
public class A1 {
static boolean flag = false;
public static boolean exist(char[][] board, String word) {
if(word=="") return true;
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if(board[i][j]==word.charAt(0)){
recur(i,j,1,board,word);
if(flag) return true;
}
}
}
return flag;
}
private static void recur(int i, int j,int k,char[][] board,String word) {
if(k==word.length()){
flag = true;
} else{
if((i-1>=0&&word.charAt(k)==board[i-1][j])){
recur(i-1,j,k+1,board,word);
}
if((i+1<board.length&&word.charAt(k)==board[i+1][j])){
recur(i+1,j,k+1,board,word);
}
if((j-1>=0&&word.charAt(k)==board[i][j-1])){
recur(i,j-1,k+1,board,word);
}
if((j+1<board[0].length&&word.charAt(k)==board[i][j+1])){
recur(i,j+1,k+1,board,word);
}
}
}
public static void main(String[] args) {
char[][] board = new char[][]{{'c','a','a'},{'a','a','a'},{'b','c','d'}};
String word = "aab";
System.out.println(exist(board, word));
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

浙公网安备 33010602011771号