题解 | #童谣寻找问题# DFS 搜索

童谣寻找问题

https://www.nowcoder.com/practice/2537c84de0034d019b1679cf7bfcf776

知识点

DFS 搜索

思路

在board中搜索,每个位置能否和字符串的对应位置匹配,如果能找到则返回true

实现上,可以先存下本个位置的board字符,和字符串匹配使用完后置为‘#’,防止该位置被循环使用,退出本层时还原board的字符。

AC code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param board char字符型vector<vector<>> 
     * @param word string字符串 
     * @return bool布尔型
     */
    int dx[4] = {-1, 0, 1, 0};
    int dy[4] = {0, -1, 0, 1};
    bool exist(vector<vector<char> >& board, string word) {
        int n = board.size(), m = board[0].size();
        
        function<bool(int, int, int)> dfs = [&](int x, int y, int u) {
            if (u == word.size()) {
                return true;
            }
            auto t = board[x][y];
            if (t != word[u]) return false;
            board[x][y] = '#';
            for (int i = 0; i < 4; i ++) {
                int nx = x + dx[i], ny = y + dy[i];
                if (nx >= 0 and ny >= 0 and nx < n and ny < m) {
                    if (dfs(nx, ny, u + 1)) return true;
                }
            }
            board[x][y] = t;
            return false;
        };

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

全部评论

相关推荐

02-12 17:30
已编辑
字节跳动_实习生(实习员工)
要怎么办呢牛:我觉得大厂日常实习最大的意义就是给自己背书,一个好公司的实习就像一个好学历似的,能够给自己增加一个标签,让别人觉得你可以。(至于真正实习干了啥,这个感觉并不太重要)。当然一家之言,仅供参考。另外,楼主已经很强了,实习毕业双双拿下,已经领先好多好多人了,羡慕啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务