LeetCode 题解(131): Number of Islands
来源:互联网 发布:c语言的思考图 编辑:程序博客网 时间:2024/06/04 20:00
题目:
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:
11110110101100000000
Answer: 1
Example 2:
11000110000010000011
Answer: 3
题解:用DFS,每当访问到一个未曾访问过的'1'时,count加一,同时DFS周围的'1',标记为visited。最后返回count。
C++版:
class Solution {public: int row, col; int numIslands(vector<vector<char>>& grid) { if(grid.size() == 0) return 0; row = grid.size(); col = grid[0].size(); vector<vector<bool>> visited(row, vector<bool>(col, false)); int count = 0; for(int i = 0; i < row; i++) { for(int j = 0; j < col; j++) { if(grid[i][j] == '1' && !visited[i][j]) { count++; mark(i, j, grid, visited); } } } return count; } void mark(int i, int j, vector<vector<char>>& grid, vector<vector<bool>>& visited) { if(i < 0 || j < 0 || i >= row || j >= col || visited[i][j]) return; visited[i][j] = true; if(grid[i][j] == '1') { mark(i+1, j, grid, visited); mark(i-1, j, grid, visited); mark(i, j+1, grid, visited); mark(i, j-1, grid, visited); } }};
Java版:
public class Solution { public int row; public int col; public int numIslands(char[][] grid) { if(grid.length == 0) return 0; row = grid.length; col = grid[0].length; int count = 0; boolean[][] visited = new boolean[row][col]; for(int i = 0; i < row; i++) { for(int j = 0; j < col; j++) { if(grid[i][j] == '1' && !visited[i][j]) { count++; mark(i, j, grid, visited); } } } return count; } public void mark(int i, int j, char[][] grid, boolean[][] visited) { if(i < 0 || j < 0 || i >= row || j >= col || visited[i][j]) return; if(grid[i][j] == '1') { visited[i][j] = true; mark(i+1, j, grid, visited); mark(i-1, j, grid, visited); mark(i, j+1, grid, visited); mark(i, j-1, grid, visited); } }}
Python版:
class Solution: # @param {character[][]} grid # @return {integer} def numIslands(self, grid): if len(grid) == 0: return 0 visited = [[False for i in range(len(grid[0]))] for j in range(len(grid))] count = 0 for i in range(len(grid)): for j in range(len(grid[0])): if grid[i][j] == '1' and not visited[i][j]: count += 1 self.mark(i, j, grid, visited) return count def mark(self, i, j, grid, visited): if i >= len(grid) or i < 0 or j >= len(grid[0]) or j < 0 or visited[i][j]: return visited[i][j] = True if grid[i][j] == '1': self.mark(i+1, j, grid, visited) self.mark(i, j+1, grid, visited) self.mark(i-1, j, grid, visited) self.mark(i, j-1, grid, visited)
0 0
- LeetCode 题解(131): Number of Islands
- leetcode题解:Number of Islands
- LeetCode 题解(288): Number of Islands II
- LeetCode 200. Number of Islands 题解
- LeetCode题解–200. Number of Islands
- Number of Islands (leetcode)
- [LeetCode] Number of Islands
- Leetcode-Number of Islands
- Leetcode Number of Islands
- [LeetCode]Number of Islands
- [leetcode]Number of Islands
- [leetcode] Number of Islands
- leetcode Number of Islands
- leetcode:Number of Islands
- [leetcode] Number of Islands
- [LeetCode] Number of Islands
- LeetCode:Number of Islands
- Leetcode: Number of Islands
- IBM 的 Java 诊断,第 3 部分: 使用面向 Java 的 Lock Analyzer 诊断同步和锁问题
- VisualVM Btrace使用
- 使用 WebSphere Application Server 的 Performance Monitoring Infrastructure API 编写性能监控工具
- Java 理论与实践: 用 JMX 检测应用程序
- Java RMI之HelloWorld篇
- LeetCode 题解(131): Number of Islands
- #leetcode#Longest Palindromic Substring
- C语言实现红黑树
- 基于 JVMTI 实现 Java 线程的监控
- 深入 Java 调试体系,第 2 部分: JVMTI 和 Agent 实现
- Hprof使用及在Hadoop中MR任务使用
- LeetCode 题解(132): Binary Tree Right Side View
- summary ranges
- PMC Flashtec + Memblaze PBlaze 4 = 性能惊人的NVM Express SSD!