题目链接:number-of-islands
/** * 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 * */ public class NumberOfIslands { // 45 / 45 test cases passed. // Status: Accepted // Runtime: 298 ms // Submitted: 0 minutes ago ////时间复杂度O(n ^ 2),空间复杂度O(1) public int numIslands(char[][] grid) { int m = grid.length; if(m == 0) return 0; int n = grid[0].length; int islands = 0; for(int i = 0; i < m; i ++) { for (int j = 0; j < n; j++) { if(grid[i][j] == '1') { islands ++; dfs(grid, i, j); } } } return islands; } public void dfs(char[][] grid, int i, int j) { if(i < 0 || i == grid.length || j < 0 || j == grid[0].length) return; //验证在矩阵范围内 if(grid[i][j] == '1') { grid[i][j] = '0'; //标记为已访问 dfs(grid, i - 1, j); //左 dfs(grid, i + 1, j); //右 dfs(grid, i, j - 1); //上 dfs(grid, i, j + 1); //下 } } public static void main(String[] args) { // TODO Auto-generated method stub } }
[LeetCode 200] Number of Islands
原文地址:http://blog.csdn.net/ever223/article/details/45062259