54:螺旋矩阵
程序员文章站
2022-05-20 13:47:19
...
问题描述
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
问题分析
这题真没啥好白扯的。就是模拟旋转就行。注意边界条件的控制。
AC代码1,手工模拟:
class Solution:
def spiralOrder(self, matrix):
res = []
if not len(matrix):
return res
left = top = 0
right = len(matrix[0])
botton = len(matrix)
flag = 1
while len(res) < len(matrix)*len(matrix[0]):
if flag == 1:
for i in range(left,right):
res.append(matrix[top][i])
flag = 2
top += 1
elif flag == 2:
for i in range(top,botton):
res.append(matrix[i][right-1])
flag = 3
right -= 1
elif flag == 3:
for i in range(right-1,left-1,-1):
res.append(matrix[botton-1][i])
flag = 4
botton -= 1
elif flag == 4:
for i in range(botton-1,top-1,-1):
res.append(matrix[i][left])
flag = 1
left += 1
return res
s = Solution()
print(s.spiralOrder([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]))
AC代码2:python内置函数
class Solution:
def spiralOrder(self, matrix):
res = []
while matrix:
res += matrix.pop(0)
matrix = list(map(list, zip(*matrix)))[::-1] # *matrix对序列进行解包
print(matrix)
return res
s = Solution()
print(s.spiralOrder([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]))
上一篇: leetcode 94. 二叉树的中序遍历(C++)
下一篇: 71:简化路径