這次的題目是:200. Number of Islands (Medium)
題目大意是: 給定一個 2D 網格,'1' 代表陸地,'0' 代表水。
計算島嶼的數量(島嶼由相鄰的陸地連接而成,只能上下左右連接)。
class Solution {
public int numIslands(char[][] grid) {
if (grid == null || grid.length == 0) {
return 0;
}
int rows = grid.length;
int cols = grid[0].length;
int count = 0;
// 遍歷整個網格
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
// 發現新島嶼
if (grid[i][j] == '1') {
count++;
dfs(grid, i, j); // 用 DFS 標記整個島嶼
}
}
}
return count;
}
// DFS 遞迴函數
private void dfs(char[][] grid, int i, int j) {
int rows = grid.length;
int cols = grid[0].length;
// 邊界檢查 + 是否為陸地
if (i < 0 || i >= rows || j < 0 || j >= cols || grid[i][j] == '0') {
return;
}
// 標記為已訪問(沉沒這塊陸地)
grid[i][j] = '0';
// 向四個方向擴散
dfs(grid, i - 1, j); // 上
dfs(grid, i + 1, j); // 下
dfs(grid, i, j - 1); // 左
dfs(grid, i, j + 1); // 右
}
}