LeetCode |島の数の0200番号[Pythonの]。

LeetCode 0200ナンバー諸島の島々ミディアムナンバー[] [] [DFS]パイソン

問題

LeetCode

2Dグリッドマップを考えると'1'S(土地)と'0'S(水)、島の数を数えます。島は水に囲まれ、水平方向または垂直方向に隣接するランドを接続することによって形成されています。あなたは、グリッドのすべての4つのエッジが全て水に囲まれていると仮定します。

例1:

Input:
11110
11010
11000
00000

Output: 1

例2:

Input:
11000
11000
00100
00011

Output: 3

問題

電源ボタン

なる所定の'1'(ランド)、及び'0'二次元のグリッドコンピューティングの島の数からなる(水)。島は水に囲まれ、水平または垂直方向に隣接するランドに接続されているを通してです。あなたは、グリッドの四方を囲む水があると仮定することができます。

例1:

输入:
11110
11010
11000
00000

输出: 1

例2:

输入:
11000
11000
00100
00011

输出: 3

思考

DFS

对每个 "1" 进行 DFS,把它四周相邻的所有 “1” 全变为 “0”。
计算总的 DFS 次数,就是岛的个数。

時間計算量: O(N-M *)、mは列の数であり、nは列の数です。
宇宙複雑: Oの最悪のケース(M * N)、我々はすべての土地のケースです。

python3コード
class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        ans = 0
        # m, n = len(grid), len(grid[0])  # Runtime Error
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == "1":
                    self.dfs(grid, i, j)
                    ans += 1
        return ans
    
    # dfs template
    def dfs(self, grid, i, j):
        m, n = len(grid), len(grid[0])
        directions = [(0, 1), (0, -1), (-1, 0), (1, 0)]
        grid[i][j] = "0"
        for direction in directions:
            x, y = i + direction[0], j + direction[1]
            if 0 <= x < m and 0 <= y < n:
                if grid[x][y] == "1":  # change "1" to "0"
                    self.dfs(grid, x, y)

コードアドレス

GitHubのリンク

おすすめ

転載: www.cnblogs.com/wonz/p/12381066.html