赞
踩
关于这类给定表格,查找单词问题,思路基本一致。每个各自有上下左右四个方向,向每个方向搜索的问题。具体代码如下所示。
- class Solution {
- public:
- bool exist(vector<vector<char>>& board, string word) {
- int n=board.size();
- int m=board[0].size();
- if(board.empty()||word.empty()){return false;} //当数组或者给定单词为空直接返回。
- vector<vector<int>>f(n,vector<int>(m,0)); //创建一个数组记录board上对应位置是否被使用过,初始值为0,使用过标记为1
- for(int i=0;i<n;i++)
- {
- for(int j=0;j<m;j++){
- if(dfs(board,word,0,i,j,f))
- return true;
- }
- }
- return false;
- }
-
- bool dfs(vector<vector<char>>& board,string word,int index,int x,int y,vector<vector<int>>&f){
- //当搜索完整个单词,那么返回true.
- if(index==word.size()){
- return true;
- }
- if(x<0||x>=board.size()||y<0||y>=board[0].size()||board[x][y]!=word[index]) return false; //如果有越界或者是当前位置不是要搜索的下一个字符,那么直接返回false.
- if(f[x][y]==0){ //当前位置是要搜索的字符,那么从这个位置开始搜索下一个字符
- f[x][y]=1; //先将这个位置标记为使用过
- if(dfs(board,word,index+1,x+1,y,f)||dfs(board,word,index+1,x,y+1,f)||dfs(board,word,index+1,x-1,y,f)||dfs(board,word,index+1,x,y-1,f))
- {
- return true; //当前位置向四个方向有一个能够走完全程那么返回true
- }
- f[x][y]=0; //没有一个可以的证明从当前位置出发没有合适的单词,不能标记当前位置,因此复位。
- }
- return false;
- }
-
- };

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。