岛屿数量(NC109/考察次数Top41/难度中等)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了岛屿数量(NC109/考察次数Top41/难度中等)相关的知识,希望对你有一定的参考价值。
描述:
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。
示例1
输入:
[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]
返回值:
3
(题目来自牛客网)
用C++实现如下
class Solution {
public:
/**
* 判断岛屿数量
* @param grid char字符型vector<vector<>>
* @return int整型
*/
int solve(vector<vector<char> >& grid) {
// write code here
int count = 0;
for(int i=0; i<grid.size(); ++i) //负责行遍历
{
for(int j=0; j<grid[0].size(); ++j) //负责一行的每一列的遍历
{
if(grid[i][j]=='1') //碰到是1的,岛屿数量加1,然后处理一下
{
isIland(grid, i, j); //处理岛屿的函数
++count; //数量++
}
}
}
return count;
}
//处理岛屿的函数,如果当前位置的值已经是0则返回,不是0则赋值为0,同时用处理岛屿的函数处理上下左右各位置
void isIland(vector<vector<char>>& grid, int i, int j)
{
if(grid[i][j]=='0') //找到0,才不需要继续使其上下左右都为0,
return; //注意递归调用一定要有结束递归的条件
grid[i][j]='0'; //找到的不是0,则需要将其赋值为0,再继续判断其上下左右
if(i-1>=0) //上
isIland(grid, i-1, j);
if(i+1<grid.size()) //下
isIland(grid, i+1, j);
if(j-1>=0) //左
isIland(grid, i, j-1);
if(j+1<grid[0].size()) //右
isIland(grid, i, j+1);
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于岛屿数量(NC109/考察次数Top41/难度中等)的主要内容,如果未能解决你的问题,请参考以下文章