• LeetCode //C - 200. Number of Islands


    200. Number of Islands

    Given an m x n 2D binary grid grid which represents a map of *‘1’*s (land) and *‘0’*s (water), return the number of islands.

    An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
     

    Example 1:

    Input: grid = [
    [“1”,“1”,“1”,“1”,“0”],
    [“1”,“1”,“0”,“1”,“0”],
    [“1”,“1”,“0”,“0”,“0”],
    [“0”,“0”,“0”,“0”,“0”]
    ]
    Output: 1

    Example 2:

    Input: grid = [
    [“1”,“1”,“0”,“0”,“0”],
    [“1”,“1”,“0”,“0”,“0”],
    [“0”,“0”,“1”,“0”,“0”],
    [“0”,“0”,“0”,“1”,“1”]
    ]
    Output: 3

    Constraints:
    • m == grid.length
    • n == grid[i].length
    • 1 <= m, n <= 300
    • grid[i][j] is ‘0’ or ‘1’.

    From: LeetCode
    Link: 200. Number of Islands


    Solution:

    Ideas:

    1. Initialize: The numIslands function initializes the count of islands to zero. It also determines the dimensions of the grid, m (number of rows) and n (number of columns).

    2. Iterate through the Grid: The code then iterates over each cell of the grid. If the current cell is ‘1’, it indicates a part of an island that hasn’t been explored yet.

    3. DFS to Explore the Island: When a ‘1’ is found, we use the dfs function to explore the entire island. The idea is that once we find a ‘1’, we want to explore all its neighboring cells (up, down, left, and right) to see if they are also part of the same island. If they are, we continue the exploration recursively.

    • In the dfs function, if the current cell is out-of-bounds, or if it is water (i.e., ‘0’), we return immediately without further exploration.
    • If the current cell is ‘1’, we mark it as visited by changing its value to ‘0’. This ensures that we don’t count the same part of an island more than once.
    • We then recursively call dfs on the neighboring cells to continue exploring the island.

    4. Counting the Islands: Each time we initiate a DFS exploration from the numIslands function (i.e., every time we find an unexplored ‘1’), we increment our island count by 1. By the end of the iteration over the grid, we would have explored and counted all distinct islands.

    5. Return the Count: Finally, numIslands returns the count of islands.

    Code:
    void dfs(char** grid, int i, int j, int m, int n) {
        if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == '0') {
            return;
        }
    
        grid[i][j] = '0';
        
        dfs(grid, i - 1, j, m, n); // up
        dfs(grid, i + 1, j, m, n); // down
        dfs(grid, i, j - 1, m, n); // left
        dfs(grid, i, j + 1, m, n); // right
    }
    
    int numIslands(char** grid, int gridSize, int* gridColSize) {
        if (grid == NULL || gridSize == 0 || gridColSize == NULL) {
            return 0;
        }
    
        int m = gridSize;
        int n = gridColSize[0];
        int islandCount = 0;
        
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == '1') {
                    islandCount++;
                    dfs(grid, i, j, m, n);
                }
            }
        }
    
        return islandCount;
    }
    
    • 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
    • 31
    • 32
    • 33
  • 相关阅读:
    基础数据结构万字详解
    Vuex、localStorage和sessionStorage:如何选择合适的数据存储方式?
    云计算概论 --云安全机制
    如何在编写程序语言中编写注释-python
    学信息系统项目管理师第4版系列35_补遗
    力扣精选算法100道——提莫攻击(模拟专题)
    SpringCloud微服务实践之二 搭建注册中心
    人工智能在制造业的工程化应用实践----工业软件讲坛第九次讲座
    CSS滚动条详解(::-webkit-scrollbar )
    如何将本地文件上传到Gitee
  • 原文地址:https://blog.csdn.net/navicheung/article/details/133123142