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:
c 复制代码
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;
}
相关推荐
NAGNIP16 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队17 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja1 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下1 天前
最终的信号类
开发语言·c++·算法
茉莉玫瑰花茶1 天前
算法 --- 字符串
算法
博笙困了1 天前
AcWing学习——差分
c++·算法
NAGNIP1 天前
认识 Unsloth 框架:大模型高效微调的利器
算法
NAGNIP1 天前
大模型微调框架之LLaMA Factory
算法
echoarts1 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Python技术极客1 天前
一款超好用的 Python 交互式可视化工具,强烈推荐~
算法