版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010870545/article/details/82813134
54 螺旋矩阵
class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
rown = len(matrix)
coln = len(matrix[0]) if rown > 0 else 0
total = rown * coln
ans = []
i = 0
while len(ans) < total:
for rightcol in range(i, coln-i):
ans.append(matrix[i][rightcol])
downrow = -1 # 越界标记
for downrow in range(i+1, rown - i):
ans.append(matrix[downrow][rightcol])
if downrow == -1:
break
icol = -1
for icol in range(rightcol-1, -1+i, -1):
ans.append(matrix[downrow][icol])
if icol == -1:
break
for uprow in range(downrow-1, i, -1):
ans.append(matrix[uprow][icol])
i += 1
return ans
59 螺旋矩阵II
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
ans = [[0] * n for _ in range(n)]
i = 0
j = 1
while j <= n*n:
for rightcol in range(i, n-i):
ans[i][rightcol] = j
j += 1
downrow = -1
for downrow in range(i+1, n-i):
ans[downrow][rightcol] = j
j += 1
if downrow == -1:
break
icol = -1
for icol in range(rightcol-1, -1+i, -1):
ans[downrow][icol] = j
j += 1
if icol == -1:
break
for uprow in range(downrow-1, i, -1):
ans[uprow][icol] = j
j += 1
i += 1
return ans