Swift刷算法:島嶼數(shù)量

給你一個由 '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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 給你一個由 '1'(陸地)和 '0'(水)組成的的二維網(wǎng)格,請你計算網(wǎng)格中島嶼的數(shù)量。島嶼總是被水包圍,并且每座島...
    Shimmer_閱讀 246評論 0 1
  • 給你一個由 '1'(陸地)和 '0'(水)組成的的二維網(wǎng)格,請你計算網(wǎng)格中島嶼的數(shù)量。 島嶼總是被水包圍,并且每座...
    Celia_QAQ閱讀 276評論 0 0
  • Time: 2019-08-11 題目描述 給定一個由 '1'(陸地)和 '0'(水)組成的的二維網(wǎng)格,計算島嶼的...
    鋼筆先生閱讀 251評論 0 0
  • 給你一個由'1'(陸地)和 '0'(水)組成的的二維網(wǎng)格,請你計算網(wǎng)格中島嶼的數(shù)量。島嶼總是被水包圍,并且每座島嶼...
    無力韜韜閱讀 143評論 0 0
  • 給定一個由 '1'(陸地)和 '0'(水)組成的的二維網(wǎng)格,計算島嶼的數(shù)量。一個島被水包圍,并且它是通過水平方向或...
    蚓語戲言閱讀 56評論 0 0

友情鏈接更多精彩內(nèi)容