岛屿的数量-leetcode
题目描述
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:grid = [
['1','1','1','1','0'],
['1','1','0','1','0'],
['1','1','0','0','0'],
['0','0','0','0','0']
]
输出:1
示例 2:
输入:grid = [
['1','1','0','0','0'],
['1','1','0','0','0'],
['0','0','1','0','0'],
['0','0','0','1','1']
]
输出:3
提示:
m == grid.lengthn == grid[i].length1 <= m, n <= 300grid[i][j]的值为'0'或'1'
解法一
思路:
逐行扫描,对于一个为1的陆地作为起点,深度遍历其上下左右,直到碰到0,并且对于遍历过程中将等于1的陆地改为0,这样就将这片陆地的所有土地扫描结束并且全部置为0,再选择新的起点进行同样的操作。
代码:
class Solution {
public void dfs(char[][] grid , int row , int col) {
int nr=grid.length;
int nc=grid[0].length;
grid[row][col]='0';
if(row-1>=0 && grid[row-1][col]=='1')dfs(grid,row-1,col);
if(row+1<nr && grid[row+1][col]=='1')dfs(grid,row+1,col);
if(col-1>=0 && grid[row][col-1]=='1')dfs(grid,row,col-1);
if(col+1<nc && grid[row][col+1]=='1')dfs(grid,row,col+1);
}
public int numIslands(char[][] grid) {
int numIslands=0;
int nr=grid.length;
if(nr==0)return numIslands;
int nc=grid[0].length;
for(int i=0;i<nr;i++){
for(int j=0;j<nc;j++){
if(grid[i][j]=='1'){
numIslands++;
dfs(grid,i,j);
}
}
}
return numIslands;
}
}

浙公网安备 33010602011771号