LintCode Python 簡單級題目 433.島嶼的個數


題目描述:

給一個01矩陣,求不同的島嶼的個數。

0代表海,1代表島,如果兩個1相鄰,那么這兩個1屬於同一個島。我們只考慮上下左右為相鄰。

樣例

在矩陣:

[
  [1, 1, 0, 0, 0],
  [0, 1, 0, 0, 1],
  [0, 0, 0, 1, 1],
  [0, 0, 0, 0, 0],
  [0, 0, 0, 0, 1]
]

中有 3 個島.

題目分析:

循環2維數組,找到其值為1的元素,count++,

然后遞歸改變其上下左右為1的元素值為0,

循環繼續。

 

源碼:

class Solution:
    # @param {boolean[][]} grid a boolean 2D matrix
    # @return {int} an integer
    def numIslands(self, grid):
        # Write your code here
        if grid is None: return None
        if grid == []: return 0
        # 當數組不為空時,計算行數和列數
        self.n = len(grid)
        self.m = len(grid[0])
        x = 0
        for i in range(self.n):
            for j in range(self.m):
                if grid[i][j] == 1:
                    x += 1
                    grid = self.change(grid,i,j)
        return x
    
    def change(self,grid,i,j):
        grid[i][j] = 0
        if i > 0 and grid[i-1][j] == 1:
            # 置當前點上邊的點為0
            grid = self.change(grid,i-1,j)
        if i < self.n-1 and grid[i+1][j] == 1:
            # 置當前點下邊的點為0
            grid = self.change(grid,i+1,j)
            
        if j < self.m-1 and grid[i][j+1] == 1:
            # 置當前點右方的點為0
            grid = self.change(grid,i,j+1)
        if j > 0 and grid[i][j-1] == 1:
            # 置當前點左方的點為0
            grid = self.change(grid,i,j-1)
        return grid


免責聲明!

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



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