剑指 Offer 12. 矩阵中的路径

剑指 Offer 12. 矩阵中的路径
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。

示例 1:

输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”
输出:true

这道题我写过. LeetCode 79 word search
下面是我自己写的……

class Solution {
    public boolean exist(char[][] board, String word) {
        int m = board.length;
        int n = board[0].length;
        boolean[][] visited = new boolean[m][n];
        // 枚举 面板中每一个字符 作为起点,做深度优先搜索
        char[] str = word.toCharArray();
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(str[0]==board[i][j]){
                    
                    if(dsf(i,j,board,0,str,visited)){                    
                        return true;
                    }
                }               
            }
        }
        return false;
    }
    public boolean dsf(int x, int y, char[][] board,int index, char[] str, boolean[][] visited){
        if(index==str.length){
            return true;
        }
        if(x<0 || x>=board.length || y<0 || y>=board[0].length || board[x][y]!=str[index] || visited[x][y] ){
            return false;
        }
        visited[x][y]=true;
        // 其实这四句可以合并啦,  if(dsf || dsf||...) {return true}
        if(dsf(x+1,y,board,index+1,str,visited)){return true;}
         if(dsf(x,y+1,board,index+1,str,visited)){return true;}
          if(dsf(x-1,y,board,index+1,str,visited)){return true;}
           if(dsf(x,y-1,board,index+1,str,visited)){return true;}
           visited[x][y]=false; // 恢复现场!!
        return false;
    }
}

你可能感兴趣的:(数据结构与算法,矩阵,线性代数)