当前位置:   article > 正文

岛屿数量(Java)_岛屿数量java

岛屿数量java

在这里插入图片描述
分析:
把1当成陆地,0当成海,简单来说只要上下左右如果是1的话就可以看成一个陆地,从示例中也可以很清楚的看懂。
思路:
用一个和grid大小一样的整型二维数组arr来代表岛屿的生成过程,遍历grid,如果遇到grid[i][j]=‘1’&&arr[i][j]=0(前者代表这是块陆地,后者表示要在arr中生成这块陆地),进入岛屿生产函数createIsLands,createIsLands函数首先要在arr中生成岛屿即arr[i][j]=1,然后判断这块岛屿的上下左右是否满足之前那个条件,如果满足则递归调用createIsLands继续生成岛屿,直到无法再生成岛屿为止,此时大岛屿数量num++,跳出整个大函数,继续遍历grid和arr,直到遍历完为止,类似感染的过程。
解题过程:
①首先肯定是需要定义一个num用来表示岛屿的数量,初始为0
②初始化arr二维数组,大小和grid一样
③遍历二维数组
④当grid[i][j]=‘1’&&arr[i][j]=0时进入岛屿生产函数createIsLands
⑤进入函数,arr[i][j]=1
⑥判断i,j坐标的上下左右是否满足grid[i][j]=‘1’&&arr[i][j]=0且没有数组越界
⑦满足的话递归调用createIsLands直到不能再上次岛屿为止
⑧跳出大createIsLands函数,num++
⑨遍历完毕,return num
代码:

class Solution {
    public int numIslands(char[][] grid) {
        int num = 0;
        int arr[][] = new int[grid.length][grid[0].length];
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (arr[i][j] == 0 && grid[i][j] == '1') {
                    createIsLands(i , j,grid,arr);
                    num++;
                }
            }
        }
        return num;
    }
    public static void createIsLands(int i,int j,char[][] grid,int arr[][]) {
        arr[i][j] = 1;
        if(i - 1 >= 0 && arr[i - 1][j] == 0 && grid[i - 1][j] == '1'){
            createIsLands(i - 1, j,grid,arr);
        }
        if(i + 1 <= grid.length - 1 && arr[i + 1][j] == 0 && grid[i + 1][j] == '1'){
            createIsLands(i + 1, j,grid,arr);
        }
        if(j - 1 >= 0 && arr[i][j - 1] == 0 && grid[i][j - 1] == '1'){
            createIsLands(i, j - 1,grid,arr);
        }
        if(j + 1 <= grid[0].length - 1 && arr[i][j + 1] == 0 && grid[i][j + 1] == '1'){
            createIsLands(i, j + 1,grid,arr);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号