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

题目描述

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

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

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

  • 上:0
  • 下:数组第一维长度
  • 左:0
  • 下:数组第二维长度

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

  • 从左到右:更新上,加一
  • 从上到下:更新右,减一
  • 从右到左:更新下,减一
  • 从下到上:更新左,加一

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

# -*- 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]

作者原创,如需转载及其他问题请邮箱联系:[email protected]
个人网站:https://www.myqiang.top。

你可能感兴趣的:(面试题29:顺时针打印矩阵)