LeetCode Go-岛屿数量

题目:岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/queue-stack/kbcqv/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


Sovle:

> for (int i = 0; i < grid.GetLength(0); i++)
>             {
>                 for (int j = 0; j < grid[i].Length; j++)
>                 {
>                     if (temp[i][j]=='1')
>                     {
>                         count++;
>                         Search(i, j);
>                     }
>                 }
>             }
> void Search(int a, int b)
>             {
>                 left(a, b);
>                 right(a, b);
>                 up(a, b);
>                 down(a, b);
>             }
> void left(int m, int n)
>             {
>                 int j = n - 1;
>                 if (j < 0)
>                 {
>                     return;
>                 }
>                 if (grid[m][j] == '1'&&temp[m][j]=='1')
>                 {
>                     temp[m][j] = '0';
>                     Search(m, j);
>                 }
>                 return;
>             }
> //2020.12.15上面的代码,Search()、left()可以合并精简
> //合并完之后:
> public int NumIslands(char[][] grid)
>         {
>             int count = 0;
>             for (int i = 0; i < grid.GetLength(0); i++)
>             {
>                 for (int j = 0; j < grid[i].Length; j++)
>                 {
>                     if (grid[i][j] == '1')
>                     {
>                         count++;
>                         Search(i, j);
>                     }
>                 }
>             }
>             return count;
>         void Search(int r,int c)
>         {
>                 if (!inarea(r,c))
>                 {
>                     return;
>                 }
>                 if (grid[r][c]!='1')
>                 {
>                     return;
>                 }
>                 grid[r][c] = '2';//如果是1,标记为已遍历
>                 //下面开始上下左右深度搜索
>                 Search(r - 1, c);
>                 Search(r + 1, c);
>                 Search(r, c - 1);
>                 Search(r, c + 1);
>         }
>         bool inarea(int r,int c)
>         {
>             if (r>=0&&r< grid.GetLength(0)&&c>=0&&c<grid[r].Length)
>             {
>                     return true;
>             }
>                 return false;
>         }
> 
>         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值