0463. Island Perimeter
Last updated
Last updated
**Input:** grid = [[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 above.**Input:** grid = [[1]]
**Output:** 4**Input:** grid = [[1,0]]
**Output:** 4class Solution {
int peri = 0;
public int islandPerimeter(int[][] grid) {
// edge cases
if (grid.length == 0 || grid[0].length == 0) return 0;
for (int r = 0; r < grid.length; r++) {
for (int c = 0; c < grid[0].length; c++) {
if (grid[r][c] == 1) {
helper(grid, r, c);
}
}
}
return peri;
}
private void helper(int[][] grid, int row, int col) {
// exit
if (row < 0 || row >= grid.length || col < 0 || col >= grid[0].length
|| grid[row][col] == 0) {
// out of boundary
peri++;
return;
}
if (grid[row][col] == -1) return; // visited before
// look around
grid[row][col] = -1; // marked visited
helper(grid, row+1, col);
helper(grid, row-1, col);
helper(grid, row, col+1);
helper(grid, row, col-1);
}
}
/*
DFS/BFS, when meet unavailable cell perimeter++;
*/