题目内容
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
题目思路
从外向里顺时针打印。我们首先可以做一个函数用来打印最外层的,然后判定是否需要打印内圈,如果不需要就结束,需要就再次调用这个函数。这道题的难点在于一定要处理好list之间的嵌套关系,很容易搞乱。这种题目很容易写着写着就犯迷糊不知道该怎么样了,所以一定要先罗列出整个程序的流程,然后在依照着流程写每一部分的代码。把特殊情况罗列出来(比如只有一行或者只有一列),这样更不容易出错。
程序代码
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
if not matrix:
return matrix
res=[]
while 1:
tmp=self.ring(matrix)
#print(tmp)
res+=tmp
wid,lgt=len(matrix),len(matrix[0])
if wid>=3 and lgt>=3:
matrix=matrix[1:wid-1]
tmp_matrix=[]
for row in matrix:
row=row[1:len(row)-1]
tmp_matrix.append(row)
matrix=tmp_matrix
else:
break
#print('matrix is ',matrix)
return res
def ring(self,matrix):#用来进行外围输出
if not matrix:
return
wid,lgt=len(matrix),len(matrix[0])
tmp=[]
if wid==1:
tmp=matrix[0]
return tmp
elif lgt==1:
for i in matrix:
tmp.append(i[0])
return tmp
for i in range(lgt):
tmp.append(matrix[0][i])
for i in range(1,wid):
tmp.append(matrix[i][lgt-1])
for i in range(lgt-2,-1,-1):
tmp.append(matrix[wid-1][i])
if wid>2:
for i in range(wid-2,0,-1):
tmp.append(matrix[i][0])
return tmp