• 【LeetCode】200#岛屿的个数


    题目描述

    给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

    示例 1:

    输入:
    11110
    11010
    11000
    00000
    
    输出: 1
    

    示例 2:

    输入:
    11000
    11000
    00100
    00011
    
    输出: 3
    

    解题思路

    找到一个值为'1'的点(岛屿),把该点地值置为'1',在它的周围(上下左右)继续(递归地)找值为'1'的点,同样,找到后就把该点的值置为'1',直到找不到值为'1'的点,这样就完成了一座岛屿的搜索,计数器加一。

    对二维数组中的每一个点执行上述操作,完成后返回计数器的值,即为岛屿的数量。

    源代码

    public int numIslands (char[][] grid) {
        int m = grid.length;
        if (m == 0) return 0;
        int n = grid[0].length;
        int count = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == '1') {
                    dfs(grid, i, j);
                    count++;
                }
            }
        }
        return count;
    }
    
    private void dfs (char[][] grid, int i, int j) {
        if (i >= 0 && j >= 0 
            && i < grid.length 
            && j < grid[0].length 
            && grid[i][j] == '1') {
            grid[i][j] = '0';
            dfs(grid, i + 1, j);
            dfs(grid, i - 1, j);
            dfs(grid, i, j + 1);
            dfs(grid, i, j - 1);
        }
    }
    

    心得体会

    最初看到这个题目,觉得跟《算法》第四版上的 1.5 节 Union-Find 比较像,但是要实现 UF 的数据结构,感觉比较麻烦,于是使用了 DFS 。

  • 相关阅读:
    7-11
    7-9
    7-8
    7-7
    7-6
    7-5
    7-4
    7-3
    第08次:升级《陋习手记》完善主从UI
    第07次:升级《陋习手记》显示多条数据
  • 原文地址:https://www.cnblogs.com/yuzhenzero/p/10280979.html
Copyright © 2020-2023  润新知