• 搜索+回溯


    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

  • 相关阅读:
    swift基本数据类型的使用
    宏定义单例类
    开发必备宏定义大全
    GUI02
    GUI01
    浅谈代码块的加载顺序
    Java里的多态
    在java中this和super的使用
    冒泡排序的简单优化
    命令行传参和不定传参
  • 原文地址:https://www.cnblogs.com/darklights/p/11676123.html
Copyright © 2020-2023  润新知