Leetcode練習(Python):深度優先搜索類:第200題:島嶼數量:給你一個由'1'(陸地)和 '0'(水)組成的的二維網格,請你計算網格中島嶼的數量。 島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連接形成。 此外,你可以假設該網格的四條邊均被水包圍。


題目:

島嶼數量:給你一個由 '1'(陸地)和 '0'(水)組成的的二維網格,請你計算網格中島嶼的數量。  島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連接形成。  此外,你可以假設該網格的四條邊均被水包圍。  

示例 1:

輸入:
11110
11010
11000
00000
輸出: 1
示例 2:

輸入:
11000
11000
00100
00011
輸出: 3
解釋: 每座島嶼只能由水平和/或豎直方向上相鄰的陸地連接而成。

思路:

類似機器人走迷宮。本題使用的沉島的思想。

程序:

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        if not grid:
            return 0
        result = 0
        for index1 in range(len(grid)):
            for index2 in range(len(grid[0])):
                if grid[index1][index2] == '1':
                    self.auxiliary(grid, index1, index2)
                    result += 1
        return result 
    def auxiliary(self, grid: List[List[str]], index1: int, index2: int):
        if index1 < 0 or index2 < 0 or index1 >= len(grid) or index2 >= len(grid[0]) or grid[index1][index2] != '1':
            return 
        grid[index1][index2] = '0'
        self.auxiliary(grid, index1 - 1, index2)
        self.auxiliary(grid, index1 + 1, index2)
        self.auxiliary(grid, index1, index2 - 1)
        self.auxiliary(grid, index1, index2 + 1)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM