📜  在二进制矩阵中找到由 1 形成的形状的周长(1)

📅  最后修改于: 2023-12-03 15:23:29.384000             🧑  作者: Mango

在二进制矩阵中找到由 1 形成的形状的周长
问题描述

给定一个二进制矩阵,其中1表示陆地,0表示水。找到由1形成的形状的周长。假设矩阵的边缘都是水。

例如,下面的矩阵中,陆地的周长为12。

1100
1101
0001
0011
解法

可以遍历整个矩阵,并计算每个陆地格子的周长。对于每个陆地格子,如果其上下左右四个方向都是0或者矩阵的边缘,则该格子的周长为1,否则该格子的周长为0。

最后将所有陆地格子的周长相加即为矩阵中所有形状的周长之和。

代码实现

以下为Python代码实现:

def islandPerimeter(grid) -> int:
    perimeter = 0
    m = len(grid)
    n = len(grid[0])
    for i in range(m):
        for j in range(n):
            if grid[i][j] == 1:
                # 判断上下左右四个方向是否为0
                up = 0 if i == 0 or grid[i-1][j] == 0 else 1
                down = 0 if i == m-1 or grid[i+1][j] == 0 else 1
                left = 0 if j == 0 or grid[i][j-1] == 0 else 1
                right = 0 if j == n-1 or grid[i][j+1] == 0 else 1
                perimeter += 4 - up - down - left - right
    return perimeter
复杂度分析

时间复杂度:遍历整个矩阵需要O(mn)的时间,每个陆地格子需要常数时间计算周长,因此总时间复杂度为O(mn)。

空间复杂度:只需要常数个变量存储周长,因此空间复杂度为O(1)。