
深度优先遍历
解题思路:时间复杂度O(
m
∗
n
m*n
m∗n)完整遍历整个数组一次,空间复杂度O(
m
∗
n
m*n
m∗n) |
---|
695题的同源题,方法和代码完全一样。只是需要的答案不一样,695题要的是最大岛屿面积。这道题要一共几个岛
代码:官方增加了测试用例,现在只能达到3ms击败75%用户,而前面1ms的都是2022年左右提交的用户 |
---|

class Solution {
char[][] grid;
int n,m;
int [][] positions = new int[][]{{-1,0},{0,-1},{1,0},{0,1}};
public int numIslands(char[][] grid) {
this.grid = grid;
this.n = grid.length;this.m = grid[0].length;
int ans = 0;
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
if(grid[i][j] == '1'){
dfs(i,j);
ans++;
}
}
}
return ans;
}
public void dfs(int r,int c){
grid[r][c]='2';
for(int[] position:positions){
int nextR = r + position[0];
int nextC =c+position[1];
if(nextR<0 || nextC<0 || nextR>=n || nextC>=m || grid[nextR][nextC] != '1') continue;
dfs(nextR,nextC);
}
}
}