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