题目链接: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
}
}