面試編程題解題思路(二)

0x01 深度優先搜索

題目描述:

這種題解題思路在於將連接在一起的‘1’看作是一個整體,可以將二維數組看成是無向圖,每個‘1’之間都連接着一條線

從頭到尾對數組進行遍歷,碰到‘1’就進行深度搜索,將搜索到的‘1’全部變爲‘0’, 這樣發起深度搜索的次數就是島嶼的數量

代碼如下:

class Solution(object):
    def numIslands(self, grid):
        """
        :type grid: List[List[str]]
        :rtype: int
        """
        def dfs(grid, i, j):
            grid[i][j] == 0

            for x, y in [(i-1, j), (i+1, j), (i, j-1), (i, j+1)]:
                if 0 <= x < len(grid) and 0 <= y < len(grid[0]) and grid[x][y] == '1':
                    grid[x][y] =0
                    dfs(grid, x, y)

        
        n_r = len(grid)
        if n_r == 0:
            return 0
        n_l = len(grid[0])

        island_num = 0
        for i in range(n_r):
            for j in range(n_l):
                if grid[i][j] == '1':
                    island_num += 1
                    dfs(grid, i, j)

        return island_num

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章