其他分享
首页 > 其他分享> > 力扣 - 剑指 Offer 12. 矩阵中的路径

力扣 - 剑指 Offer 12. 矩阵中的路径

作者:互联网

题目

剑指 Offer 12. 矩阵中的路径

思路1(回溯、DFS)

代码

class Solution {
    public boolean exist(char[][] board, String word) {
        char[] cs = word.toCharArray();
        
        // 遍历整个二维数组,即将每个字符作为第一个字符进行尝试
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[0].length; j++) {
                // 只要有一条符合条件,则返回true
                if (dfs(board, cs, i, j, 0)) {
                    return true;
                }
            }
        }

        // 没找到
        return false;
    }

    public boolean dfs(char[][] board, char[] cs, int i, int j, int curIndex) {
        // 超过二维数组边界就返回false
        // 字符不匹配也直接结束递归
        if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] != cs[curIndex]) {
            return false;
        }

        // 如果以及全部匹配到了,就直接返回true,而不用继续匹配剩下的啦
        if (curIndex == cs.length - 1) {
            return true;
        }

        // 能递归到这里,说明当前cs中curIndex索引对应的字符和boards是匹配的
        // 因此我们需要吧遍历过的字符设置为空白,防止再次遍历
        board[i][j] = '\0';
        boolean res = dfs(board, cs, i + 1, j, curIndex + 1) ||
                      dfs(board, cs, i - 1, j, curIndex + 1) ||
                      dfs(board, cs, i, j + 1, curIndex + 1) ||
                      dfs(board, cs, i, j - 1, curIndex + 1);
        // 回溯的时候要把原来设置为空白字符的还原
        board[i][j] = cs[curIndex];

        // 只要出现true,就一路返回
        return res;
    }
}

复杂度分析

标签:字符,12,word,Offer,力扣,length,board,cs,curIndex
来源: https://www.cnblogs.com/linzeliang1222/p/15583267.html