200.岛屿数量
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
题解:
岛屿类问题通用解法:力扣
避免重复遍历:在所有值为1的陆地格子上做DFS遍历。每走过一个陆地格子 ,就把格子的值改为2,当我们遇到2时,就知道这是遍历过的格子了。所以每个格子可能取3个值:
0——海洋格子 1——陆地格子(未遍历过) 2——陆地格子(已遍历过)
class Solution {
private int res;
public int numIslands(char[][] grid) {
res=0;
for(int i = 0; i < grid.length ; i++){
for(int j = 0; j < grid[0].length; j++){
if(grid[i][j] == '1'){
dfsGrid(grid,i,j);
res++;
}
}
}
return res;
}
private void dfsGrid(char[][] grid,int row, int col){
//判断是否越界,若越界直接返回
if(row >= grid.length || col >= grid[0].length || row < 0 || col < 0) return;
//不是未遍历的陆地的格子,直接返回
if(grid[row][col] != '1') return;
//已遍历的陆地格子改变值为2
grid[row][col] = '2';
//访问上下左右四个相邻节点
dfsGrid(grid, row - 1, col);
dfsGrid(grid, row + 1, col);
dfsGrid(grid, row, col - 1);
dfsGrid(grid, row, col + 1);
}
}
547.省份数量
有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。
省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。
给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。
返回矩阵中 省份 的数量。
题解:力扣
1.本题考查连通分量的数目,所以要额外添加一个变量去跟踪结合的数量(有多少棵树)。
2.初始化的时候把集合数量加一。
3.合并的时候让集合数量减一。