面试题20:顺时针打印指针
2018-07-01 本文已影响0人
fighting_css
【题目描述】
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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
【思路】
将矩阵想象成一个一个环,n表示环数,依次从左至右、从上至下、从右至左,从下自上而下遍历。
【代码】
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
row = len(matrix)
res = []
if row == 0:
return res
col = len(matrix[0])
if col ==1:
for j in range(row):
res.append(matrix[j][0])
return res
#记录环数
n = min(row/2,col/2)
m = row%2 and col%2
for i in range(n):
#从左自右
res_temp = matrix[i][i:col-i]
#从上至下
for j in range(i+1,row-i):
res_temp.append(matrix[j][col-i-1])
#从右至左
for j in range(col-i-2,i-1,-1):
res_temp.append(matrix[row-i-1][j])
#从下至上
for j in range(row-i-2,i,-1):
res_temp.append(matrix[j][i])
res = res+res_temp
#m==1,说明还有一行空余
if m ==1:
res += matrix[n][row-n-1:col-n]
return res