1.岛屿数量
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。
输入:
1 2 3 4 5 6 |
|
输出:1
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述:
数字0和1组成的二维数组(空格分隔),前两个数字为地图的高和宽(行和列)
输出描述:正整数,岛屿归属
示例1输入例子:
4 5 1 1 1 1 0 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0
输出例子:1
题解:
主循环:简单来说就是来找1
遍历整个二维数组,找到1,就进入dfs循环,在dfs循环中把指针指向的那个1修改为0,一直到这个岛屿的1都变为零,最终都变0,得出岛屿数量
class Solution {
public int numIslands(char[][] grid) {
int count = 0;
for(int i = 0; i < grid.length; i++) {
for(int j = 0; j < grid[0].length; j++) {
if(grid[i][j] == '1'){
dfs(grid, i, j);
count++;
}
}
}
return count;
}
private void dfs(char[][] grid, int i, int j){
if(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == '0') return;
grid[i][j] = '0';
dfs(grid, i + 1, j);
dfs(grid, i, j + 1);
dfs(grid, i - 1, j);
dfs(grid, i, j - 1);
}
}
作者:Krahets
链接:https://leetcode.cn/problems/number-of-islands/solutions/16884/number-of-islands-shen-du-you-xian-bian-li-dfs-or-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。