LeetCode200:Number of Islands
阿新 • • 發佈:2019-01-12
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)