被包围的岛屿_岛屿数量

被围绕的区域

被围绕的区域

image-20220506160620210

//这里我们采用逆向思维,我们可以找到没有被x全部环绕的O 然后对O进行深度遍历!
//标记后,得到新的矩阵,再将所以的O修改成X 再将刚刚标记的改成O!
class Solution {
    int[][] next = {{1,0},{-1,0},{0,1},{0,-1}};
    public void DSF(char[][] board,int row,int col,int sr,int sc){
         //用Z标记该位置
         board[sr][sc]='Z';
          for(int i = 0;i<next.length;i++){
                int x = sr + next[i][0];
                int y = sc + next[i][1];
                if(x>=row||x<0||y>=col||y<0){
                    //越界
                    continue;
                }
                if(board[x][y]=='O'){
                    //深度遍历
                    DSF(board,row,col,x,y);
                }
          }
    }
    public void solve(char[][] board) {
        int row = board.length;
        int col = board[0].length;
        //先找边界的O深度遍历修改!
        for(int i = 0;i<row;i++){
            //左右边界!
            if(board[i][0]=='O'){//左边
                DSF(board,row,col,i,0);
            }
             if(board[i][col-1]=='O'){//右边
                DSF(board,row,col,i,col-1);
            }
        }
        for(int i = 1;i<col-1;i++){
            //上下边界!
            if(board[0][i]=='O'){//上边
                DSF(board,row,col,0,i);
            }
             if(board[row-1][i]=='O'){//下边
                DSF(board,row,col,row-1,i);
            }
        }
        //遍历将围绕的O修改成X,标记的改为O!
        for(int i = 0;i<row;i++){
            for(int j = 0;j<col;j++){
                if(board[i][j]=='O'){//修改O
                    board[i][j]='X';
                }
                if(board[i][j]=='Z'){//修改标记
                    board[i][j]='O';
                }
            }
        }  
    }
}

岛屿数量

岛屿数量

image-20220506161325884

class Solution {
    int[][] next = {{1,0},{-1,0},{0,1},{0,-1}};
    public void DSF(char[][] board,int row,int col,int sr,int sc){
         //用'2'标记该位置
         board[sr][sc]='2';
          for(int i = 0;i<next.length;i++){
                int x = sr + next[i][0];
                int y = sc + next[i][1];
                if(x>=row||x<0||y>=col||y<0){
                    //越界
                    continue;
                }
                if(board[x][y]=='1'){
                    //深度遍历
                    DSF(board,row,col,x,y);
                }
          }
    }
    public int numIslands(char[][] grid) {
         int result = 0;
         int row = grid.length;
         int col = grid[0].length;
         for(int i = 0;i<row;i++){
             for(int j = 0;j<col;j++){
                 if(grid[i][j]=='1'){//标记!
                     DSF(grid,row,col,i,j);
                     result++;
                 }
             } 
         }
         return result;
    }
}
#笔试#
全部评论
大佬们的才华真的是太好了
点赞 回复 分享
发布于 2022-08-27 13:01 河南

相关推荐

notbeentak...:就抓,嗯抓,开不开匿名都要抓,一点坏事不让说,就对公司顶礼膜拜佩服的五体投地就对了
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务