79(单词搜索)
class Solution { public: int m,n,d[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; vector<vector<bool>> visited; bool inarea(int x,int y){ return x>=0 && x<m && y>=0 && y<n; } bool searcharea(const vector<vector<char>> &board,const string& word,int index,int startx,int starty){ if(index==word.size()-1) return board[startx][starty] == word[index]; if(board[startx][starty]==word[index]){ visited[startx][starty]=true; for(int i=0;i<4;i++){ int newx=startx+d[i][0]; int newy=starty+d[i][1]; if(inarea(newx,newy) && !visited[newx][newy] && searcharea(board,word,index+1,newx,newy) ) return true; } visited[startx][starty] =false; } return false; } bool exist(vector<vector<char>>& board, string word) { m=board.size(); n=board[0].size(); visited=vector<vector<bool>>(m,vector<bool>(n,false)); for(int i=0;i<board.size();i++) for(int j=0;j<board[i].size();j++) if(searcharea(board,word,0,i,j)) return true; return false; } };
200(连通岛屿数量,floodfill算法)
class Solution { public: int m,n,d[4][2]={{-1,0},{1,0},{0,1},{0,-1}}; vector<vector<bool>> visited; bool inarea(int x,int y){ return x>=0 && x<m && y>=0 && y<n; } void dfs(vector<vector<char>> &grid,int x,int y){ visited[x][y]=true; for(int i=0;i<4;i++){ int newx=x+d[i][0]; int newy=y+d[i][1]; if(inarea(newx,newy)&&!visited[newx][newy]&&grid[newx][newy]=='1') dfs(grid,newx,newy); } return; } int numIslands(vector<vector<char>>& grid) { m=grid.size(); if(m==0) return 0; n=grid[0].size(); visited=vector<vector<bool>>(m,vector<bool>(n,false)); int res=0; for(int i=0;i<m;i++) for(int j=0;j<n;j++) if(grid[i][j]=='1'&&!visited[i][j]){ res++; dfs(grid,i,j); } return res; } };
130
417