Word Search - LeetCode

题目链接

Word Search - LeetCode

注意点

  • 尽量减少函数参数的个数,而且最好使用引用,否则速度会慢很多

解法

解法一:典型的dfs。从开头的字母开始,往四周寻找下一个字母,如果没有匹配的就返回false。根据短路特性找到一个匹配的之后就会继续访问下去。

class Solution {
public:
    bool dfs(vector<vector<char>>& board,string& word,int index,int x,int y)
    {
        
        if(index == word.size()) return true;
        if(x < 0 || y < 0 || x >= board.size() || y >= board[0].size() || board[x][y] != word[index] ) return false;
        bool res = false;
        char temp = board[x][y];
        board[x][y] = '*';
        res = dfs(board,word,index+1,x,y+1) ||
              dfs(board,word,index+1,x,y-1) ||
              dfs(board,word,index+1,x+1,y) ||
              dfs(board,word,index+1,x-1,y);
        board[x][y] = temp;
        return res;
    }
    bool exist(vector<vector<char>>& board, string word) {
        if(word.size() == 0) return true;
        if(board.size() == 0) return false;
        int i,j,m = board.size(),n = board[0].size();
        for(i = 0;i < m;i++)
        {
            for(j = 0;j < n;j++)
                if(board[i][j] == word[0]) if(dfs(board,word,0,i,j)) return true;
        }
        return false;
    }
};

小结

  • dfs。
posted @ 2019-03-08 20:17  闽A2436  阅读(130)  评论(0编辑  收藏  举报