阅读目录
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
思路及Python实现
- 行用x来表示,列用y来表示!(图来自:https://blog.csdn.net/ggdhs/article/details/90182059)
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
if matrix == None:
return []
xstep = len(matrix) - 1 # 求出有多少行
ystep = len(matrix[0]) # 求出有多少列
x = 0
y = -1
res = []
while (xstep >= 0 and ystep >= 0) and len(res) < (len(matrix) * len(matrix[0])):
# 设置循环终止条件,只要每次循环一三步读取的行距或者二四步读取的列距小于0,停止循环
for i in range(ystep):
y += 1
res.append(matrix[x][y])
ystep -= 1 # 第一行移动到了末尾,最后一行再想左移动时,ystep总体向左移动一位
for i in range(xstep):
x += 1
res.append(matrix[x][y])
xstep -= 1 # 再最后一行末尾,xstep先总体向上移动一行,因为等下要向上
if xstep >= 0: # 判断是否是否还有行间距
for i in range(ystep):
y -= 1
res.append(matrix[x][y])
ystep -= 1
if ystep >= 0: # 判断是否还有列间距
for i in range(xstep):
x -= 1
res.append(matrix[x][y])
xstep -= 1
return res