1. 程式人生 > >LeetCode200:Number of Islands

LeetCode200:Number of Islands

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

Input:
11110
11010
11000
00000

Output:
 1

Example 2:

Input:
11000
11000
00100
00011

Output: 3

LeetCode:連結

給定一個由字元‘1’(陸地)和‘0’(水域)組成的二維網格地圖,計算島嶼的個數。島嶼被水域環繞,由豎直或者水平方向鄰接的陸地構成。你可以假設網格地圖的四條邊都被水域包圍。

 

做法是,我們對每個有“1"的位置進行dfs,把和它四聯通的位置全部變成“0”,這樣就能把一個點推廣到一個島。

所以,我們總的進行了dfs的次數,就是總過有多少個島的數目。注意理解dfs函式的意義:已知當前是1,把它周圍相鄰的所有1全部轉成0。

class Solution(object):
    def numIslands(self, grid):
        """
        :type grid: List[List[str]]
        :rtype: int
        """
        m = len(grid)
        if m == 0:
            return 0
        n = len(grid[0])
        ans = 0
        for x in range(m):
            for y in range(n):
                if grid[x][y] == '1':
                    ans += 1
                    self.dfs(grid, x, y, m, n)
        return ans

    def dfs(self, grid, x, y, m ,n):
        if x < 0 or y < 0 or x >= m or y >= n or grid[x][y] == '0':
            return 
        grid[x][y] = '0'
        self.dfs(grid, x-1, y, m, n)
        self.dfs(grid, x+1, y, m, n)
        self.dfs(grid, x, y+1, m, n)
        self.dfs(grid, x, y-1, m, n)