算法
(暴力枚举) $O(nm)$
对于一片陆地,
- 若其上方没有陆地,则贡献一条边;
- 若其左方没有陆地,则贡献一条边;
- 若其下方没有陆地,则贡献一条边;
- 若其右方没有陆地,则贡献一条边;
遍历所有陆地求出所有贡献和即可。
C++ 代码
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
int n = grid.size();
int m = grid[0].size();
int res = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(grid[i][j]) {
res += (i == 0 || !grid[i - 1][j])
+ (i == n - 1 || !grid[i + 1][j])
+ (j == 0 || !grid[i][j - 1])
+ (j == m - 1 || !grid[i][j + 1]);
}
}
}
return res;
}
};