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

题目描述:

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

解析:

本体要考虑到只有一行或者只有一列的情况,如果不是这种情况的话,先打印第一行,然后打印最后一列,然后打印逆序最后一行,然后逆序打印最后一列,把剩余的矩形带入递归循环。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值