输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:
以四个方向进行遍历:定义四个指针变量,up=left=0,right=矩阵列数,down = 矩阵行数
以up <= down and left <= right为循环条件从外向里以顺时针的顺序遍历:
- up一定,从左到右遍历,up+=1
- right 一定,从上到下遍历,right-=1
- down一定,从右到左遍历,down-=1
- left一定,从下到上遍历,left -= 1
注意:判断遍历条件,如第3条:down一定,从右到左遍历,down-=1,如果之前不加up <= down,将不能满足一些边界测试案例,造成重复遍历
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
up=left=0
right=len(matrix[0])-1
down=len(matrix)-1
result=[]
while up <= down and left <= right:
if left <= right:
for i in range(left, right+1):
result.append(matrix[up][i])
up+=1
if up <= down:
for j in range(up, down+1):
result.append(matrix[j][right])
right-=1
if left <= right and up <= down:
for k in range(right, left-1, -1):
result.append(matrix[down][k])
down-=1
if left <= right and up <= down:
for z in range(down, up-1, -1):
result.append(matrix[z][left])
left+=1
return result