用一个函数来检测每行中每个元素与其左边相邻的元素是否都是陆地,如果都是,则在相邻数中加1。
先横着遍历一遍,再用zip()函数把列表竖过来,再遍历一遍。
因为每一个相邻的都相当于损失了两条边(相邻的两个块的两条边都被吞了),所以最后用所有边数减去被吞的边数,就是暴露在外面的边数。
class Solution:
def islandPerimeter(self, grid: List[List[int]]) -> int:
near_num = 0
all_sides = 0
def check_near_1(lis):
temp_num = 0
for i in range(1,len(lis)):
if lis[i] == 1 and lis[i] == lis[i-1]:
temp_num += 2
return temp_num
for each in grid:
near_num += check_near_1(each)
all_sides += each.count(1)*4
for each in zip(*grid):
near_num += check_near_1(each)
return all_sides - near_num