分类:array
难度:medium
- 螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
题解
这个题也是没有什么技巧,好好处理边界问题即可,从外向内依次遍历第一圈,第二圈,直到结束
下面代码中
get_circle(rowup,rowdown,colleft,colright)是生成一圈的坐标
原题解的链接为https://leetcode-cn.com/problems/spiral-matrix/solution/luo-xuan-ju-zhen-by-leetcode/
代码
class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
def get_circle(rowup,rowdown,colleft,colright):
res = list()
for col in range(colleft,colright+1):
yield rowup,col
for row in range(rowup+1,rowdown+1):
yield row,colright
if rowdown>rowup and colright>colleft:
for col in range(colright-1,colleft,-1):
yield rowdown,col
for row in range(rowdown,rowup,-1):
yield row,colleft
if not matrix:
return []
ans = []
rowup,rowdown = 0,len(matrix)-1
colleft,colright = 0,len(matrix[0])-1
while rowup<=rowdown and colleft<=colright:
for x,y in get_circle(rowup,rowdown,colleft,colright):
ans.append(matrix[x][y])
rowup+=1
rowdown-=1
colleft+=1
colright-=1
return ans