牛客Top200---岛屿数量(java)

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客Top200---岛屿数量(java)相关的知识,希望对你有一定的参考价值。

题目


思路

1、深度优先遍历,遍历二维数组,当遇到’1’时,进行深度优先遍历,遍历这个’1’附近的’1’,直到附近都是0,则第一个岛屿就找到了,接下来继续找’1’,再深度优先遍历,遍历其附近是否有’1’,是则为岛屿一部分,直到附近没有1,跳出时,第二个岛屿就找到,继续找第三个和第四个
2、每次遍历完的’1’(岛屿)都置为’0’

代码

import java.util.*;

public class Solution {
    /**
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    public int solve (char[][] grid) {
        int count = 0;//记录岛屿数量
        //判空
        if(grid == null || grid.length == 0){
            return count;
        }
        int rows = grid.length;
        int cols = grid[0].length;
        //遍历岛屿
        for(int i = 0 ; i < rows ; i++){
            for(int j = 0 ; j < cols ; j++){
                if(grid[i][j] == '1'){
                    count++;
                    dfs(grid,i,j,rows,cols);
                }
            }
        }
        return count;
    }
    
    // 每遇到'1'后, 开始向四个方向 递归搜索. 搜到'1'后变为'0',
    // 因为相邻的属于一个island. 然后开始继续找下一个'1'
     private void dfs(char[][] grid, int i, int j, int rows, int cols) {
         //越界返回
         if(i < 0 || i >= rows || j < 0 || j >= cols){
             return;
         }
         //不是岛屿也返回
         if(grid[i][j] != '1'){
             return;
         }
         //如果是岛屿,则变为'0',属于相邻岛屿可以并一起
         grid[i][j]='0';
         //传过来的'1'(岛屿),看他附近有没有岛屿,递归搜索
         dfs(grid,i-1,j,rows,cols);//左
         dfs(grid,i+1,j,rows,cols);//右
         dfs(grid,i,j-1,rows,cols);//上
         dfs(grid,i,j+1,rows,cols);//下
     }
}

以上是关于牛客Top200---岛屿数量(java)的主要内容,如果未能解决你的问题,请参考以下文章

牛客Top200---括号序列(java详解)

精选力扣500题 第41题 LeetCode 200. 岛屿数量c++/java详细题解

牛客Top200---判断回文(java)

牛客Top200---进制转换(java)

java 200.岛屿数量(Union Find).java

java 200.岛屿数量(Union Find).java