463. Island Perimeter
https://leetcode.com/problems/island-perimeter/
在一个N×N的矩阵中,N<100,1代表岛,0代表海,岛内没有海,求岛的周长
[[0,1,0,0], [1,1,1,0], [0,1,0,0], [1,1,0,0]] Answer: 16 Explanation: The perimeter is the 16 yellow stripes in the image below:
由正方形组成的不规则图形的周长和正方形个数有什么关系?
这个就是这题的核心
发散一下平移的思想,多一个右邻居,多两条边,多一个下邻居,多两条边(当然你也可以统计左上)
公式就是“周长=正方形数量 * 4 - 邻居数量 * 2”
1 class Solution(object): 2 def islandPerimeter(self, grid): 3 island, neighbor = 0, 0 4 for i in xrange(0, len(grid)): 5 for j in xrange(0, len(grid[i])): 6 if grid[i][j] == 1: 7 island += 1 8 if i < len(grid) - 1 and grid[i + 1][j] == 1: # down neighbour 9 neighbor += 1 10 if j < len(grid[i]) - 1 and grid[i][j + 1] == 1: # right neighbour 11 neighbor += 1 12 return island * 4 - neighbor * 2