給你一個由
'1'(陸地)和'0'(水)組成的的二維網(wǎng)格,請你計算網(wǎng)格中島嶼的數(shù)量。
島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。
此外,你可以假設(shè)該網(wǎng)格的四條邊均被水包圍。
題目來源:https://leetcode.cn/problems/number-of-islands
class Solution {
func numIslands(_ grid: [[Character]]) -> Int {
// 變成可變的才好原地修改
var grid = grid
func dfs(_ i: Int, _ j: Int) {
// 數(shù)組四周的上下左右方向可能會越界,要排除掉
if i < 0 || j < 0 || i >= grid.count || j >= grid[i].count {
return
}
// 如果已經(jīng)是海水就不需要在遍歷
if grid[i][j] == "0" {
return
}
// 填充為海水,避免下次再次遍歷到出現(xiàn)循環(huán)
grid[i][j] = "0"
// 使用深度優(yōu)先搜素四個方向
dfs(i+1, j) // 下
dfs(i-1, j) // 上
dfs(i, j+1) // 右
dfs(i, j-1) // 左
}
// 島嶼數(shù)量
var res = 0
for i in 0 ..< grid.count {
for j in 0 ..< grid[i].count {
// 遇到"1"島嶼數(shù)量加1,同時用dfs把該島嶼變成海水
if grid[i][j] == "1" {
res += 1
dfs(i, j)
}
}
}
return res
}
}

image.png