题目
我的代码(将判断算法写成一个函数)
class Solution:
def islandPerimeter(self, grid: List[List[int]]) -> int:
X=len(grid[0])
Y=len(grid)
def getPerimeter(x,y):
count=0
if y-1<0 or grid[y-1][x]==0:
count+=1
if y+1>=Y or grid[y+1][x]==0:
count+=1
if x+1>=X or grid[y][x+1]==0:
count+=1
if x-1<0 or grid[y][x-1]==0:
count+=1
print(count)
return count
count=0
for i in range(X):
for j in range(Y):
if grid[j][i]==1:
count+=getPerimeter(i,j)
return count
优秀代码(算法很巧妙,但挺难理解)
class Solution:
def islandPerimeter(self, grid: 'List[List[int]]') -> 'int':
m, n = len(grid), len(grid[0])
prev = [0]*n
ans = 0
for line in grid:
prevl = 0
for c, prevu in zip(line, prev):
if c:
ans += 4 - 2*prevu - 2*prevl
prevl = c
prev = line
return ans