顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

例如:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

题解:

根据题目示例  matrix = [[1,2,3],[4,5,6],[7,8,9]] 的对应输出 [1,2,3,6,9,8,7,4,5] 可以发现,顺时针打印矩阵的顺序是 “从左向右、从上向下、从右向左、从下向上” 循环

因此考虑设定矩阵的“上、下、左、右”的边界值,模拟以上矩阵遍历顺序

def spiralOrder(matrix):
if not matrix: return
up,down=0,len(matrix)-1
left,right=0,len(matrix[0])-1
res=[]
while left<=right and up<=down:
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 left>right: break
for i in range(right,left-1,-1):#右到左
res.append(matrix[down][i])
down-=1
for i in range(down,up-1,-1):#下到上
res.append(matrix[i][left])
left+=1
return res

if __name__=="__main__":
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(spiralOrder(matrix))
posted @ 2020-04-08 17:12  风声~~  阅读(152)  评论(0编辑  收藏  举报