Leetcode Word Search

来源:互联网 发布:php抓取访客手机号码 编辑:程序博客网 时间:2024/06/10 14:46

Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

For example,
Given board =

[  ["ABCE"],  ["SFCS"],  ["ADEE"]]
word = "ABCCED", -> returns true,
word = "SEE", -> returns true,

word = "ABCB", -> returns false.

Solve the problem on leetcode


class Solution {
public:
    bool exist(vector<vector<char>>& board, string word)
    {
      //遍历二维矩阵
      //求行
      //求列
      int row=board.size();//row
      int col=board[0].size();//col
      if(row<=0||col<=0) return false;
      if(word.size()==0) return true;
      //要查找的字符第一个char
      char fch=word.at(0);
      
      //在数组中寻找第一个字符
      for(int i=0;i<row;i++)
        for(int j=0;j<col;j++)
         {
             if(board[i][j]==fch)
              { board[i][j]=' ';
            if(dfs(board,word.substr(1),i,j)) return  true;
                 board[i][j]=fch;
              }
         }
         return false;
      }
      
     bool dfs(vector<vector<char>> &board,string word,int a,int b)
      {
          int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
          int row=board.size();//row
          int col=board[0].size();//col
          if(word.size()==0)   return true;
          for(int i=0;i<4;i++)
          {   
              int x=a+dir[i][0];
              int y=b+dir[i][1];
              if(x>=0&&x<row&&y>=0&&y<col&&board[x][y]==word.at(0))  
              //得先判断x,y是否越界;
              {    
                   board[x][y]=' ';
                   if(dfs(board,word.substr(1),x,y))  return true;
                   board[x][y]=word.at(0);
              }
          }
          return false;
      }
};


0 0
原创粉丝点击