剑指offer——顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
暴力写:
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def __init__(self):
self.result=[]
def printMatrix(self, matrix):
# write code here
row=len(matrix)
col=len(matrix[0])
if row==col==0:
return self.reuslt
elif row==1:
self.result+=matrix[0]
return self.result
elif col==1:
for i in range(row):
self.result+=matrix[i]
return self.result
elif row==2:
self.result+=matrix[0]
self.result+=matrix[1][::-1]
return self.result
elif col==2:
self.result+=matrix[0]
for i in range(1,row):
self.result.append(matrix[i][1])
for j in range(1,row)[::-1]:
self.result.append(matrix[j][0])
return self.result
else:
#first loop
self.result+=matrix[0]
#second loop
for i in range(1,row):
self.result.append(matrix[i][col-1])
#third loop
self.result+=matrix[row-1][:-1][::-1]
#fourth loop
for j in range(1,row-1)[::-1]:
self.result.append(matrix[j][0])
new_matrix=[list[1:col-1] for list in matrix[1:row-1]]
self.printMatrix(new_matrix)
return self.result
先遍历第一行:在逆时针翻转
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def turn(self,matrix):
turn_matrix=[]
row,col=len(matrix),len(matrix[0])
for j in range(col)[::-1]:
tmp=[]
for i in range(row):
tmp.append(matrix[i][j])
turn_matrix.append(tmp)
return turn_matrix
def printMatrix(self, matrix):
# write code here
res=[]
while(matrix):
if len(matrix)==1:
res.extend(matrix[0])
return res
elif len(matrix)==2:
res.extend(matrix[0])
res.extend(matrix[1][::-1])
return res
else:
res.extend(matrix[0])
matrix=self.turn(matrix[1:])
return res
浙公网安备 33010602011771号