【LeetCode】剑指 Offer(6)

目录

写在前面:

题目:剑指 Offer 12. 矩阵中的路径 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


写在前面:

军训好累.......

题目:剑指 Offer 12. 矩阵中的路径 - 力扣(Leetcode)

【LeetCode】剑指 Offer(6)_第1张图片

题目的接口:

class Solution {
public:
    bool exist(vector>& board, string word) {

    }
};

解题思路:

这道题不算很难,一眼看过去,

一下就能想到这就是用深度优先搜索(DFS),

说人话其实就是全部递归遍历一遍就行,

与所需字符串对应,符合要求就递归下去,不符合就返回。

只要注意一下细节上的问题就行。(注意走回头路这种情况)

具体思路:

1. 遍历整个矩阵

2. 通过递归判断矩阵中的每一个字符是否能够串成题目要求的字符串

3. 如果匹配成功返回true,如果匹配失败则返回false。

代码:

class Solution {
public:
    bool exist(vector>& board, string word) {
        //矩阵的长和宽
        row = board.size(); 
        col = board[0].size();

        //遍历整个矩阵
        for(int i = 0;i>& board, string word, int i, int j, int k)
    {
        //如果出现越界或者匹配失败,返回false
        if(i >= row || i < 0 || j >= col || j < 0 || board[i][j] != word[k])
        {
            return false;
        }

        //如果目标字符已经匹配完了,返回true
        if(k == word.size() - 1)
        {
            return true;
        }

        //细节:为了防止“走回头路”这种情况发生,改变位置原字符
        board[i][j] = '\0';

        //四个角度递归搜索,不符合条件返回false,符合的继续递归
        bool res = dfs(board, word, i + 1, j, k + 1) || 
                   dfs(board, word, i, j + 1, k + 1) || 
                   dfs(board, word, i - 1, j, k + 1) || 
                   dfs(board, word, i, j - 1, k + 1);

        //搜素完后可以将原字符变回原样
        board[i][j] = word[k];

        //返回最后递归的结果
        return res;
    }
};

过啦!!!

【LeetCode】剑指 Offer(6)_第2张图片

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

你可能感兴趣的:(刷题训练,leetcode,算法,c++,学习)