题目
https://leetcode-cn.com/problems/number-of-islands/
代码
class Solution {
int m,n;
public int numIslands(char[][] grid) {
m=grid.length;
n=grid[0].length;
int count=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid[i][j]=='1'){
count++;
dfs(grid,i,j);
}
}
}
return count;
}
public void dfs(char[][] grid,int i,int j){
if(grid[i][j]=='0')
return;
grid[i][j]='0';
if(i-1>=0){
dfs(grid,i-1,j);
}
if(i+1<m){
dfs(grid,i+1,j);
}
if(j-1>=0){
dfs(grid,i,j-1);
}
if(j+1<n){
dfs(grid,i,j+1);
}
}
}
复杂度
时间复杂度:O(MN),其中 M 和 N 分别为行数和列数。
空间复杂度:O(MN),在最坏情况下,整个网格均为陆地,深度优先搜索的深度达到 MN。