力扣200. 岛屿数量(DFS)

Problem: 200. 岛屿数量

文章目录

题目描述

思路及解法

1.遍历矩阵grid的每一个位置;若某个位置为'1'则将用于记录岛屿数量的变量count++,并调用dfs函数;

2.dfs函数实现:

2.1.若当前grid位置为'0'则直接返回;若超出了grid的边界也直接返回;

2.2.若当前位置为'1'则将其变为海水即覆盖为'0',并向其上下左右方向DFS

复杂度

时间复杂度:

O ( M × N ) O(M \times N) O(M×N);其中 M M M和 N N N分别为举证grid的行数与列数

空间复杂度:

O ( M × N ) O(M \times N) O(M×N)

Code

cpp 复制代码
class Solution {
public:
    /**
     * Use DFS to get the maximum number of islands
     *
     * @param grid Island array
     * @return int
     */
    int numIslands(vector<vector<char>>& grid) {
        int count = 0;
        int m = grid.size();
        int n = grid[0].size();
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (grid[i][j] == '1') {
                    count++;
                    dfs(grid, i, j);
                }
            }
        }
        return count;
    }

    /**
     * DFS implementation function
     *
     * @param grid Island array
     * @param i Index subscript
     * @param j Index subscript
     */
    void dfs(vector<vector<char>>& grid, int i, int j) {
        int m = grid.size();
        int n = grid[0].size();
        // out of index
        if (i < 0 || j < 0 || i >= m || j >= n) {
            return;
        }
        // It's already sea water
        if (grid[i][j] == '0') {
            return;
        }
        // Turn grid[i][j] into seawater
        grid[i][j] = '0';
        // Flood the land up and down
        dfs(grid, i + 1, j);
        dfs(grid, i, j + 1);
        dfs(grid, i - 1, j);
        dfs(grid, i, j - 1);
    }
};
相关推荐
沙雕不是雕又菜又爱玩几秒前
leetcode第12、13、14、15题(C++)
c++·算法·leetcode
汀、人工智能7 分钟前
[特殊字符] 第50课:最大路径和
数据结构·算法·数据库架构·图论·bfs·最大路径和
啦啦啦!9 分钟前
项目环境的搭建,项目的初步使用和deepseek的初步认识
开发语言·c++·人工智能·算法
AI成长日志9 分钟前
【笔面试算法学习专栏】链表操作·基础三题精讲(206.反转链表、141.环形链表、21.合并两个有序链表)
学习·算法·面试
算法鑫探12 分钟前
2025 图形(蓝桥杯十六届C组程序题 C 题)
c语言·数据结构·算法·新人首发
田梓燊17 分钟前
leetcode 54
算法·leetcode·职场和发展
wuweijianlove21 分钟前
算法性能优化中的编译器指令重排影响的技术4
算法
沉鱼.4425 分钟前
第十五届题目
linux·运维·算法
我头发多我先学30 分钟前
C++ STL vector 原理到模拟实现
c++·算法
机器学习之心33 分钟前
信号分解和小波阈值联合降噪 | NRBO-FMD基于牛顿拉夫逊算法优化特征模态分解+皮尔逊系数+小波阈值降噪+信号重构,MATLAB代码
算法·matlab·重构·nrbo-fmd·特征模态分解