463. 岛屿的周长
- 题号:力扣463
- 知识点:矩阵 dfs
- 目标完成度:31/150
- 总结
题干:
思路:
- 1.刚开始想着使用类似200题:岛屿数量DFS的方法做,结果无法通过全部测试
- 2.首先还是使用两层循环遍历每一个元素,当遍历到的元素为1时,使用
check
函数检查该元素上下左右是否为0,如果上下左右为0,则将计数器edge += 1
- 3.然后处理边界,当为1的元素在矩阵的最上下两行或者最左最右两列时,也存在一个边界算作周长,依次检查各个边界,并加到
edge[0]
上
class Solution:
def check(self, grid, r, c, edge):
nr = len(grid)
nc = len(grid[0])
if r-1>=0 and grid[r-1][c]==0:
edge[0] += 1
if r+1<nr and grid[r+1][c]==0:
edge[0] += 1
if c-1>=0 and grid[r][c-1]==0:
edge[0] += 1
if c+1<nc and grid[r][c+1]==0:
edge[0] += 1
def islandPerimeter(self, grid: List[List[int]]) -> int:
num = str(grid).count('1')
if num == 0:
return 0
edge = [0]
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j]:
self.check(grid, i, j, edge)
if i==0:
edge[0] += 1
if i==len(grid)-1:
edge[0] += 1
if j==0:
edge[0] += 1
if j==len(grid[0])-1:
edge[0] += 1
return edge[0]