题解 | 单词搜索

单词搜索

https://www.nowcoder.com/practice/987f2981769048abaf6180ed63266bb2

class Solution {
public:
    vector<vector<int>> direction = {{0, -1},{-1, 0},{0, +1},{+1, 0} };  //左上右下
    vector<vector<int>> used;  //防止一次检验字符串时,重复搜索

    bool exist(vector<string>& board, string word) {
        used.resize(board.size(), vector<int>( board[0].size(), 0) );  //初始化

        for(int i=0 ; i < board.size(); ++i){
            for(int j =0; j < board[0].size(); ++j){
                if( dp(board, word, 0, i, j) ){
                    return true;
                }
            }
        }
        
        return false;
    }

    bool dp(vector<string> &board, string& word, int index, int i, int j){   //输入需要验证的坐标
        if(i<0 || i>=board.size() || j<0 || j>board[0].size() || used[i][j] || word[index] != board[i][j])return false;

        if(index == word.size()-1){
            return true;
        }

        used[i][j] = 1;  //使用了本元素;
        for(int k =0; k<4; ++k){
            if( dp(board, word, index+1, i+direction[k][0], j+direction[k][1]) ){
                return true;
            }
        }
        used[i][j] = 0;  //还原
        return false;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务