zoukankan      html  css  js  c++  java
  • 力扣算法:岛屿数量

    原题:

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/number-of-islands

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

    岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。

    此外,你可以假设该网格的四条边均被水包围。

    示例 1:

    输入:
    11110
    11010
    11000
    00000
    输出: 1
    示例 2:

    输入:
    11000
    11000
    00100
    00011
    输出: 3
    解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

    解题思路:

      我采用的方式类似于广度遍历的方式。如果该位置是 ‘1’ 则入队,然后判断其上下左右是否为 ‘1’ ,1入队,0不操作。然后出队。通过循环可以找到连接的岛屿。在入队的同时将该位置重置为‘0’

           具体代码如下

    public int numIslands(char[][] grid) {
            int num=0; 
            for(int i=0;i<grid.length;i++){
                for(int j=0;j<grid[i].length;j++){
                    if(grid[i][j]=='1'){
                        num++;
                        Queue<String> queue=new LinkedList<String>();
                        queue.offer(i+";"+j);   //起始节点入队  ,根据角标设定  i;j 的格式,i为行,j为列入队
                        grid[i][j]='0';         //该位置 重定为0
                        while(!queue.isEmpty()){   //开始广度遍历
                            String t=queue.peek();   //取队头
                            queue.poll();            //出队
                            int hang=Integer.parseInt(t.split(";")[0]);  //取出行数
                            int lie=Integer.parseInt(t.split(";")[1]);   //取出列数
    //判断该点的上下左右
    if(hang>0&&grid[hang-1][lie]=='1') {// queue.offer((hang - 1) + ";" + lie); grid[hang-1][lie]='0'; } if(hang<grid.length-1&&grid[hang+1][lie]=='1') {// queue.offer((hang + 1) + ";" + lie); grid[hang+1][lie]='0'; } if(lie>0&&grid[hang][lie-1]=='1') {// queue.offer(hang + ";" + (lie - 1)); grid[hang][lie - 1] = '0'; } if(lie<grid[0].length-1&&grid[hang][lie+1]=='1') {// queue.offer(hang + ";" + (lie + 1)); grid[hang][lie + 1] = '0'; } } } } } return num; }

    PS:目前该解法时间复杂度和空间复杂度相对较高。

    如有错误,欢迎指正。

  • 相关阅读:
    Javaweb学习12.4
    Javaweb学习11.23
    Javaweb学习11.29
    Javaweb学习12.3
    Javaweb学习12.1
    Javaweb学习11.27
    2020年8月25日Java学习日记
    2020年8月18日Java学习日记
    2020年8月22日Java学习日记
    2020年8月21日Java学习日记
  • 原文地址:https://www.cnblogs.com/wys-373/p/13210467.html
Copyright © 2011-2022 走看看