zoukankan      html  css  js  c++  java
  • [leetcode]Number of Islands

    在写 “广度优先遍历” 的时候,要注意一点:所有加入队列的结点,都应该马上被标记为 “已经访问”,否则有可能会被重复加入队列。

    如果等到队列出队的时候才标记 “已经访问”,事实上,这种做法是错误的。因为如果不在刚刚入队列的时候标记 “已经访问”,相同的结点很可能会重复入队

    from queue import Queue
    
    class Solution:
        def numIslands(self, grid: List[List[str]]) -> int:
            if len(grid) == 0 or len(grid[0]) == 0:
                return 0
    
            m, n = len(grid), len(grid[0])
    
            islandCount = 0
            visited = [[False] * n for i in range(m)]
    
            for i in range(m):
                for j in range(n):
                    if not visited[i][j] and grid[i][j] == '1':
                        islandCount += 1
                        # use bfs to flood 
                        que = Queue()
                        que.put((i, j))
                        visited[i][j] = True
                        while not que.empty():
                            x, y = que.get()
                            for dx , dy in [(-1, 0), (0, -1), (0, 1), (1, 0)]:
                                if x + dx >= 0 and x + dx < m and y + dy >= 0 and y + dy < n:
                                     if not visited[x + dx][y + dy] and grid[x + dx][y + dy] == '1':
                                         que.put((x + dx, y + dy))
                                         visited[x + dx][y + dy] = True
    
            return islandCount
    

      

  • 相关阅读:
    Code first常用命令
    vue问题集锦
    net WebConfig读写
    CefSharp使用心得
    工作问题
    工作总结
    HttpContext.Current.Session为null
    Java基础00-接口组成更新31
    Java基础00-Lamda表达式30
    Java基础00-网络编程29
  • 原文地址:https://www.cnblogs.com/lautsie/p/12275083.html
Copyright © 2011-2022 走看看