Number of Islands
来源:互联网 发布:python的优势 编辑:程序博客网 时间:2024/06/08 08:40
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:
11110
11010
11000
00000
Answer: 1
Example 2:
11000
11000
00100
00011
Answer: 3
打算用union-find的方法,用dfs迭代时有可能内存溢出。
class UF(object): def union(self, a, b, tmp_grid, sz): p = self.root(a, tmp_grid) q = self.root(b, tmp_grid) if p == q: return if sz[p] > sz[q]: tmp_grid[q] = p sz[p] += sz[q] else: tmp_grid[p] = q sz[q] += sz[p] def root(self, a, tmp_grid): while(tmp_grid[a] != a): a = tmp_grid[a] return aclass Solution(object): def numIslands(self, grid): """ :type grid: List[List[str]] :rtype: int """ if len(grid) == 0: return 0 tmp_grid = [i for i in range(len(grid) * len(grid[0]))] uf = UF() m = len(grid) n = len(grid[0]) sz = [1] * (m*n) for i in range(m): for j in range(n): if grid[i][j] == '1': if j+1 < n: if grid[i][j+1] == '1': uf.union(i*n+j, i*n+j+1, tmp_grid, sz) if i+1 < m: if grid[i+1][j] == '1': uf.union(i*n+j, (i+1)*n+j, tmp_grid, sz) count = 0 for i in range(len(tmp_grid)): if tmp_grid[i] == i and grid[i/n][i%n] == '1': count += 1 return count
在网上看到比较好的解法是用dfs。如果当前grid为1,则将其设置为2,并将其周围所有的1都设置为2。这样在搜索过程中遇到的所有的1就是连通量的数目。
class Solution(object): def numIslands(self, grid): """ :type grid: List[List[str]] :rtype: int """ if len(grid) == 0: return 0 count = 0 for i in range(len(grid)): for j in range(len(grid[0])): if grid[i][j] == '1': count += 1 self.dfs(i, j, grid) return count def dfs(self, i, j, grid): if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]): return if grid[i][j] == '1': grid[i][j] = '2' self.dfs(i, j+1, grid) self.dfs(i, j-1, grid) self.dfs(i-1, j, grid) self.dfs(i+1, j, grid)
0 0
- Number of Islands
- Number of Islands
- Number of Islands
- [LeetCode] Number of Islands
- Leetcode-Number of Islands
- Number of Islands
- Leetcode Number of Islands
- [LeetCode]Number of Islands
- Number of Islands
- Number of Islands
- [leetcode]Number of Islands
- [leetcode] Number of Islands
- leetcode Number of Islands
- leetcode:Number of Islands
- [leetcode] Number of Islands
- 200 Number of Islands
- [LeetCode] Number of Islands
- Number of Islands
- 结构体可直接赋值
- Android Studio设置显示行号
- Hadoop+Hbase+Spark集群配置-Spark HA安装
- Hexo博客添加图片、音乐、视频
- 插入排序以及和冒泡排序的区别
- Number of Islands
- Android Switch开关, 高仿iOS(一)
- Vue2 后台管理系统解决方案
- typedef struct与struct的区别
- springboot+maven 问题小记(一)
- 设计模式总结笔记<二> 工厂模式
- Log4net的appender的配置
- Android 屏幕适配(上)
- Maven 中央仓库地址