1. 079

word search


2. 算法

dfs:O$$(m^2n^2)$$

  • 类似迷宫,递归回溯

  • 使用辅助数组记录走过的位置,防止一个位置被使用多次


3.代码


class Solution{

private:

    bool dfs(vector<vector<char> >&board,int x,int y,string word,int idx,vector<vector<bool> > &vis){

        if(idx==word.length())

            return true;

        if(x<0||x>=board.size()||y<0||y>=board[0].size()||

        vis[x][y]||board[x][y]!=word[idx])

            return false;

        vis[x][y]=true;



        bool ret=

                dfs(board,x+1,y,word,idx+1,vis)||

                dfs(board,x-1,y,word,idx+1,vis)||

                dfs(board,x,y+1,word,idx+1,vis)||

                dfs(board,x,y-1,word,idx+1,vis);

        vis[x][y]=false;

        return ret;

     }

public:

    bool exist(vector<vector<char> >& board,string word){

        if(board.empty()||board[0].empty())

            return word==" ";

        int n=board.size(),m=board[0].size();

        vector<vector<bool> > vis(n,vector<bool>(m,false));



        for(int i=0;i<n;i++)

            for(int j=0;j<m;j++)

                if(dfs(board,i,j,word,0,vis))

                    return true;

        return false;

     }

};

results matching ""

    No results matching ""