*剑指offer 065、矩阵中的路径

剑指offer 065、矩阵中的路径

题目

image-20210928002418549

题解

看看K神的解析:

image-20210928004822080

image-20210928004841831

class Solution {
public:
    bool hasPath(vector<vector<char> >& matrix, string word) {
        row = matrix.size();
        col = matrix[0].size();
        // 每次调用size()函数也是一笔开销
        for (int i = 0; i < row; ++i) {
            for (int j = 0; j < col; ++j) {
                if (dfs(matrix, word, i, j, 0))
                    return true;
            }
        }
        return false;
    }
private:
    int row, col;
    // k表示string中第k个元素
    bool dfs(vector<vector<char>>& matrix, string word, int i, int j, int k) {
        // 当发生越界,当前矩阵元素与目标字符不匹配时,返回false
        if (i >= row || i < 0 || j >= col || j < 0 || matrix[i][j] != word[k]) return false;
        // 当k的值等于len(word) - 1;说明字符串全部匹配了
        if (k == word.size() - 1) return true;
        // 每次访问过后标记为'\0',避免重复访问
        matrix[i][j] = '\0';
        // 朝当前元素上下左右四个方向都递归
        bool result = dfs(matrix, word, i + 1, j, k + 1) || dfs(matrix, word, i - 1, j, k + 1)
            || dfs(matrix, word, i, j + 1, k + 1) || dfs(matrix, word, i, j - 1, k + 1);
        // 将标记的元素修改为初始值
        matrix[i][j] = word[k];
        
        return result;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ClimberCoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值