zoukankan      html  css  js  c++  java
  • 岛屿数量-LeetCode

    题目描述

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。

    示例1:

    输入 :

    [
    ['1','1','1','1','0'],
    ['1','1','0','1','0'],
    ['1','1','0','0','0'],
    ['0','0','0','0','0']
    ]

    输出:1

    示例2:

    输入:
    [
    ['1','1','0','0','0'],
    ['1','1','0','0','0'],
    ['0','0','1','0','0'],
    ['0','0','0','1','1']
    ]
    输出: 3

    思路:深度优先搜索

    对每一个可能的元素(input[m][n]==1)深入(上下左右方位)到不能再深入为止(一步步递归进行),而且每个节点只能访问一次。

    为什么要进行向左和向上的搜索呢?因为在递归时,走到了右面(倒T型道路右面)所以要向上,走到了的下面(T型道路下面)要向左。

    public class Main {public int numIslands(char[][] grid) {
            if (grid.length == 0) return 0;
            int count = 0;
            boolean[][] isVisited = new boolean[grid.length][grid[0].length];
            for (int m = 0; m < grid.length; m++) {
                for (int n = 0; n < grid[0].length; n++) {
                    if (grid[m][n] == '1' && isVisited[m][n] == false) {
                        deepSearch(m, n, grid, isVisited);
                        count++;
                    }
                }
            }
            return count;
        }
    
        private void deepSearch(int m, int n, char[][] grid, boolean[][] isVisited) {
            isVisited[m][n] = true;
            if ( n+1 < grid[0].length){
                if (grid[m][n + 1] == '1' && isVisited[m][n + 1] == false) {
                    deepSearch(m, n + 1, grid, isVisited);
                }
            }
    
            if ( n-1 > -1){
                if (grid[m][n - 1] == '1' && isVisited[m][n - 1] == false) {
                    deepSearch(m, n - 1, grid, isVisited);
                }
            }
    
            if ( m+1 < grid.length){
                if (grid[m + 1][n] == '1' && isVisited[m + 1][n] == false) {
                    deepSearch(m + 1, n, grid, isVisited);
                }
            }
    
            if ( m - 1 > -1){
                if (grid[m - 1][n] == '1' && isVisited[m - 1][n] == false) {
                    deepSearch(m - 1, n, grid, isVisited);
                }
            }
        }
    
    }

     LeetCode:https://leetcode-cn.com/problems/number-of-islands/

  • 相关阅读:
    什么?Spring Boot CommandLineRunner 有坑!?
    关于 websocket 跨域的一个奇怪问题…
    电商金额计算的 4 个坑,千万注意了!
    微服务模块划分原则和接口定义原则
    tcp的三次握手(连接)与四次挥手(断开)
    二叉树遍历及算法实现
    elasticsearch搜索 倒排索引
    kubernetes落地-传统web服务迁移
    Docker核心技术-容器管理
    Docker核心技术-镜像管理
  • 原文地址:https://www.cnblogs.com/iuyy/p/13413246.html
Copyright © 2011-2022 走看看