题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
思路
- 首先要先明确循环的终止条件:rows>2*row and cols>2*col (因为矩阵的左上角元素坐标row,col是相等的,当row->row+1,col->col+1时,循环是跳出的)
- 算出终止行,终止列(因为是一圈一圈打印,需要知道这一行我要打印到哪,这一列我要打印到哪,同时也为打印下一圈做好准备)
- 按圈打印的条件:
- 从左到右:这行直接打印即可
- 从上到下:需终止行数大于起始行数
- 从右到左:需终止行数大于起始行数,终止列数大于起始列数
- 从下到上:(需保证有三行两列)终止行数比起始行数大2,终止列数大于起始列数
- start+=1
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
if not matrix:
return []
rows=len(matrix)
cols=len(matrix[0])
start=0
res=[]
while rows>2*start and cols>2*start:
endx=rows-1-start
endy=cols-1-start
for i in range(start,endy+1):
res.append(matrix[start][i])
if endx>start:
for i in range(start+1,endx+1):
res.append(matrix[i][endy])
if endx>start and endy>start:
for i in range(endy-1,start-1,-1):
res.append(matrix[endx][i])
if endx>start+1 and endy>start:
for i in range(endx-1,start,-1):
res.append(matrix[i][start])
start+=1
return res
测试用例
if __name__=='__main__':
s=Solution()
numbers=[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
print(s.printMatrix(numbers))