在单词搜索中获得标题

时间:2019-07-15 04:24:00

标签: c++ backtracking

这是leetcode的问题。 给定一个2D板和一个单词,找到单词是否存在于网格中。

单词可以由顺序相邻的单元格的字母构成,其中“相邻”的单元格是水平或垂直相邻的单元格。同一字母单元不得重复使用。

我只是简单地检查了给定单词的长度就做了dfs。

class Solution {

    public:

        int n,m;
        bool check(int i,int j){
            if(i<0||j<0||i>=n||j>=m)return false;
            return true; 
        }

        int ans;

    void dfs(vector<vector<char>>& board,string word,int i,int j,int k){       

        if(!check(i,j) || board[i][j]!=word[k] || board[i][j]=='*')return  ;

        char x=board[i][j];
        board[i][j]='*';

        if(k==word.length()-1){
            ans=1;
            return ;
        }

        //cout<<s<<endl;

        dfs(board,word,i+1,j,k+1);
        dfs(board,word,i-1,j,k+1);
        dfs(board,word,i,j+1,k+1);
        dfs(board,word,i,j-1,k+1);

        board[i][j]=x;

    }
    bool exist(vector<vector<char>>& board, string word) {
        n=board.size();m=board[0].size();
        ans=0;
        int k=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                dfs(board,word,i,j,k);
                if(ans==1)return true;
            }
        }
        return ans;
    }
};
给定输入的

TLE: https://leetcode.com/submissions/detail/243435697/testcase/

0 个答案:

没有答案