您的位置:首页 > Web前端

剑指Offer--19.顺时针打印矩阵

2017-09-19 22:46 381 查看


题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 
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.


python代码:

# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.l = []
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
self.matrix = matrix
row_start = 0
row_end = len(matrix) - 1
col_start = 0
col_end = len(matrix[0]) - 1
self.go_with_one_roll(row_start,row_end,col_start,col_end)
return self.l

def go_with_one_roll(self,row_start,row_end,col_start,col_end):
if row_start == row_end:
for i in xrange(col_start,col_end+1):
self.l.append(self.matrix[row_start][i])
elif col_start == col_end:
for i in xrange(row_start,row_end+1):
self.l.append(self.matrix[i][col_start])
else:
for i in xrange(col_start,col_end):
self.l.append(self.matrix[row_start][i])
for j in xrange(row_start,row_end):
self.l.append(self.matrix[j][col_end])
for k in xrange(col_end,col_start,-1):
self.l.append(self.matrix[row_end][k])
for m in xrange(row_end,row_start,-1):
self.l.append(self.matrix[m][col_start])
if row_end - row_start > 1 and col_end - col_start > 1:
self.go_with_one_roll(row_start+1,row_end-1,col_start+1,col_end-1)


解析:

本体要考虑到只有一行或者只有一列的情况,如果不是这种情况的话,先打印第一行,然后打印最后一列,然后打印逆序最后一行,然后逆序打印最后一列,把剩余的矩形带入递归循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: