列表

详情


463. 岛屿的周长

给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。

网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

 

示例 1:

输入:grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
输出:16
解释:它的周长是上面图片中的 16 个黄色的边

示例 2:

输入:grid = [[1]]
输出:4

示例 3:

输入:grid = [[1,0]]
输出:4

 

提示:

相似题目

岛屿的最大面积

图像渲染

边界着色

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int islandPerimeter(vector<vector<int>>& grid) { } };

golang 解法, 执行用时: 72 ms, 内存消耗: 7 MB, 提交时间: 2020-10-30 16:08:35

func islandPerimeter(grid [][]int) int {
    circle := 0
    for i, row := range grid {
        for j, b := range row {
            if b == 1 {
                circle += 4
                if j > 0 && row[j-1] == 1 {
                    circle -= 2
                }
                if i > 0 && grid[i-1][j] == 1 {
                    circle -= 2
                }
            }
        }
    }
    return circle
}

python3 解法, 执行用时: 136 ms, 内存消耗: 13.7 MB, 提交时间: 2020-10-30 16:04:15

class Solution:
    def islandPerimeter(self, grid: List[List[int]]) -> int:
        # 遍历数组, 有相邻的1, 则-2
        circle = 0
        for i,row in enumerate(grid):
            for j,b in enumerate(row):
                if b == 1:
                    circle += 4
                    if j > 0 and row[j-1] == 1:
                        circle -= 2
                    if i > 0 and grid[i-1][j] == 1:
                        circle -= 2
        return circle

上一题