题目描述
给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。
岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。
样例描述
思路
FloodFill算法
- 求周长,可以转化为遍历过程中,如果越界或者碰到水,说明走不通就是周长,走的通就不是周长。
- 这里说了只有一个岛屿,所以不需要dfs。
- 越界和是水不能同时判断,因为越界数组的下标不存在,用来判断水会数组越界。
代码
class Solution {
public int islandPerimeter(int[][] grid) {
int m = grid.length, n = grid[0].length;
int res = 0;
int dx[] = new int[]{
1, 0, -1, 0};
int dy[] = new int[]{
0, 1, 0, -1};
for (int i = 0; i < m; i ++ ) {
for (int j = 0; j < n; j ++ ) {
if (grid[i][j] == 1) {
for (int d = 0; d < 4; d ++ ) {
int x = i + dx[d], y = j + dy[d];
//越界的话,就是周长,累计加一
if (x < 0 || x >= m || y < 0 || y >= n) {
res ++;
} //否则如果是水
else if (grid[x][y] == 0) res ++;
}
}
}
}
return res;
}
}