📅  最后修改于: 2023-12-03 15:23:29.384000             🧑  作者: Mango
给定一个二进制矩阵,其中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)。