**Logic:**

- Parse the entire matrix from top to bottom.
- When you find 1, check whether it's surrounded by water (0), land(1), or out of bounds

2a. If surrounded by water or when it's present in the corner, increment the perimeter

2b. If surrounded by land, do nothing - return the perimeter

**Time complexity:** O(mn)

**Space Complexity:** O(1)

```
public int islandPerimeter(int[][] grid) {
int perimeter = 0;
for(int i=0; i<grid.length; i++) {
for(int j=0; j<grid[0].length; j++) {
if(grid[i][j] == 1) {
if(i-1 < 0 || grid[i-1][j] == 0)
perimeter++;
if(j-1 < 0 || grid[i][j-1] == 0)
perimeter++;
if(j+1 >= grid[0].length || grid[i][j+1] == 0)
perimeter++;
if(i+1 >= grid.length || grid[i+1][j] == 0)
perimeter++;
}
}
}
return perimeter;
}
```