剑指Offer-Python-牛客网

面试题29:顺时针打印矩阵

2019-01-08  本文已影响0人  凌霄文强

题目描述

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

知识点

数组


Qiang的思路

这是一个顺时针遍历矩阵的问题,也就是像画旋涡一样遍历一个二维数据。既然是遍历问题,那么首先要确定起始位置和结束位置,基于这个思想便能开始编写代码了。

因为顺时针遍历就涉及从左到右,从上到下,从右到左,从下到上。所以我们需要知道每一次的范围,也就需要知道上,下,左,右分别是多少。那么初始值我们可以设置:

然后按照顺时针的次序便可以进行遍历了,遍历顺序以及四个范围值的更新时刻如下:

并且,在每次更新之后需要判断一下当前的上下值是不是相等、左右值是不是相等,如果有一对相等则说明整个矩阵已经遍历结束。所以能写出如下的代码:

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.m=[]
        self.s=[]
        
    def push(self, node):
        # write code here
        self.m.append(self.m[-1] if self.m!=[] and self.m[-1]<node else node)
        self.s.append(node)
        
    def pop(self):
        # write code here
        if self.s==[]:
            return None
        self.m.pop(-1)
        return self.s.pop(-1)
    
    def top(self):
        # write code here
        return self.s[-1]
    
    def min(self):
        # write code here
        return self.m[-1]

作者原创,如需转载及其他问题请邮箱联系:lwqiang_chn@163.com
个人网站:https://www.myqiang.top

上一篇下一篇

猜你喜欢

热点阅读