Island Perimeter
Input:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
Output:
16
Explanation:
The perimeter is the 16 yellow stripes in the image below:
Solution
Last updated
Input:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
Output:
16
Explanation:
The perimeter is the 16 yellow stripes in the image below:
Last updated
class Solution {
public int islandPerimeter(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
int perimeter = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == 1) {
perimeter += getAdditionalPerimeter(grid, i, j);
}
}
}
return perimeter;
}
private int getAdditionalPerimeter(int[][] grid, int i, int j) {
int perimeter = 0;
int[][] dirs = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
int m = grid.length;
int n = grid[0].length;
for (int[] dir: dirs) {
int ni = i + dir[0];
int nj = j + dir[1];
if (ni < 0 || ni >= m || nj < 0 || nj >= n) {
perimeter++;
continue;
}
if (grid[ni][nj] == 0) {
perimeter++;
}
}
return perimeter;
}
}class Solution {
public int islandPerimeter(int[][] grid) {
if (grid == null || grid.length == 0 || grid[0].length == 0) {
return 0;
}
int island = 0;
int neighbor = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
if (grid[i][j] == 1) {
island++;
if (i < grid.length - 1 && grid[i + 1][j] == 1) {
neighbor++;
}
if (j < grid[i].length -1 && grid[i][j + 1] == 1) {
neighbor++;
}
}
}
}
return island * 4 - neighbor * 2;
}
}