LeetCode 30 days Challenge - Day 17
本系列将对LeetCode新推出的30天算法挑战进行总结记录,旨在记录学习成果、方便未来查阅,同时望为广大网友提供帮助。
Number of Islands
Given a 2d grid map of '1'
s (land) and '0'
s (water), count 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:
1 | Input: |
Example 2:
1 | Input: |
Solution
题目要求分析:给定一个只含有字符0
和1
的二维数组,其中0代表海洋、1代表陆地,连接在一起
的陆地构成一座岛屿
,求地图中岛屿的个数。
解法:
典型的DFS或BFS问题,本题中可以直接修改grid值,在访问过陆地(1)之后可以将之修改为海洋(0),无需额外设立一个访问数组。
具体过程如下:
- 新建一个变量nums记录岛屿数。
- 遍历整个数组,遇到为
陆地
的元素时,以该元素位置为起点进行深度优先搜索,确保其所在岛屿所有的陆地都被访问到并且修改为海洋。
因为每次访问都保证其所在岛屿所有的陆地都被访问到并且修改为海洋,所以遇到新的陆地时将nums加1。
注:本题所给的grid数组是char 字符型
数组!进行判断时候不可以写if (grid[i][j])
而要写if (grid[i][j]=='1')
。
1 | vector<vector<int>> dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; |
Karl