标签:code 函数 void example 计算 integer lan 个数 sid
Given a boolean 2D matrix, 0
is represented as the sea, 1
is represented as the island. If two 1 is adjacent, we consider them in the same island. We only consider up/down/left/right adjacent.
Find the number of islands.
Given graph:
[
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]
return 3
.
解题:算岛屿的个数。因为连接在一起的陆地都算是岛屿,所以当确定有一一个格子是陆地时,它周围的格子即使是陆地,也不能重复计算,而应该当成海洋(对应于下面代码中的dfs函数)。代码如下:
public class Solution { /** * @param grid: a boolean 2D matrix * @return: an integer */ public int numIslands(boolean[][] grid) { // write your code here int res = 0; int m = grid.length; if(m == 0) return 0; int n = grid[0].length; for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ if(grid[i][j] == true){ res++; dfs(grid, i, j); } } } return res; } public void dfs(boolean[][]grid, int i, int j){ if(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length){ return; } if(grid[i][j] == true){ grid[i][j] = false; dfs(grid, i-1, j); dfs(grid, i+1, j); dfs(grid, i, j-1); dfs(grid, i, j+1); } } }
433. Number of Islands【LintCode java】
标签:code 函数 void example 计算 integer lan 个数 sid
原文地址:https://www.cnblogs.com/phdeblog/p/9331096.html