【剑指 Offer 12. 矩阵中的路径】(回溯)

这篇博客介绍了一种利用回溯算法在二维字符数组中查找目标单词的方法。通过DFS深度优先搜索,遍历每个可能的路径,检查是否能形成目标单词。在搜索过程中,使用了visited数组来跟踪已访问的单元格,避免重复路径。当找到单词的最后一个字符时返回true,否则继续搜索相邻单元格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 【解题思路】

用回溯的方法,查询board[ ][ ]这个二维数组。

class Solution {
    public boolean exist(char[][] board, String word) {
        int m = board.length;
        int n = board[0].length;
        boolean[][] visited = new boolean[m][n];

        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(DFS(board, word, visited, i, j, 0))
                {
                    return true;
                }
            }
        }
        return false;
    }

    public boolean DFS(char[][] board, String word, boolean[][] visited, int row, int col, int k)
    {
        if(board[row][col] != word.charAt(k))
        {
            return false;
        }
        else if(k == word.length() - 1)
        {
            return true;
        }
        
        visited[row][col] = true;
        boolean flag = false;

        int[][] directions = {{0,1},{1,0},{0,-1},{-1,0}};
        for(int[] dire : directions)
        {
            int newRow = row + dire[0];
            int newCol = col + dire[1];
            if(newRow >= 0 && newCol >= 0 && newRow < board.length && newCol < board[0].length)
            {
                if(!visited[newRow][newCol])
                {
                    flag = DFS(board, word, visited, newRow, newCol, k+1);
                    if(flag) break;
                }
            }
        }
        
        visited[row][col] = false;
        return flag;
    } 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值