LeetCode 463
第一个想法是可以通过dfs找到所有的block,然后加上他们的边数(邻居是0或者在最边上),应该也是可以做的。
再考虑这个问题,其实还是可以简化的,因为只有一个island,每个block其实有4个边,如果和他相邻的block也是island的话,他们会有一个共享的边,都是要去掉的(-2)。转换为我们看有多少相邻的属于island的block,我们也不需要dfs,只要遍历整个数组就行。
def islandPerimeter(self, grid: List[List[int]]) -> int:m, n, count = len(grid), len(grid[0]), 0 for i in range(m):for j in range(n):if grid[i][j] == 1:count +=4if i > 0 and grid[i-1][j] == 1:count -=2if j > 0 and grid[i][j-1] == 1:count -=2return count