版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36811967/article/details/86166034
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
可以对四个角点做标记,然后从左到右,从上到下,从右到左,从下到上遍历一个圈,考虑到可能存在奇数行或列,所以要对top和bottom以及left和right做一个判断,标记内缩一圈:
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
res = []
if not matrix or not matrix[0]:
return res
left, right, top, bottom = 0, len(matrix[0])-1, 0, len(matrix)-1
while left <= right and top <= bottom:
for j in range(left, right+1):
res.append(matrix[top][j])
for i in range(top+1, bottom+1):
res.append(matrix[i][right])
if top < bottom:
for j in range(right-1, left, -1):
res.append(matrix[bottom][j])
if left < right:
for i in range(bottom,top, -1):
res.append(matrix[i][left])
left += 1
right -= 1
top += 1
bottom -= 1
return res
还有种思路就是,每取一行,matrix就逆时针旋转90度,直到为空:
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
res = []
while matrix:
res.extend(matrix.pop(0))
if not matrix or not matrix[0]:
break
matrix = self.rotate(matrix)
return res
def rotate(self, mat):
new = []
for j in range(len(mat[0])-1, -1, -1):
new.append([row[j] for row in mat])
return new