给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:螺旋的矩阵输出包括四个方向的输出,始终获取矩阵的边界,对其输出方式进行依次执行。
class Solution:
def spiralOrder(self, matrix: [[int]]) -> [int]:
res=[]
#处理特殊情况
if(len(matrix)==0):
return []
#获取矩阵的形状
m=len(matrix)
n=len(matrix[0])
#保留本次循环中的四方位极值
up=0
down=m-1
left=0
right=n-1
while(True):
for i in range(left,right+1):
res.append(matrix[up][i])
up+=1
if (up > down): break
for i in range(up,down+1):
res.append(matrix[i][right])
right-=1
if (right < left): break
for i in range(right,left-1,-1):
res.append(matrix[down][i])
down-=1
if (down < up): break
for i in range(down,up-1,-1):
res.append(matrix[i][left])
left+=1
if (left > right): break
return res
if __name__=="__main__":
print(Solution().spiralOrder([[1,2,3],[4,5,6],[7,8,9]]))