题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
样例
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
算法1
blablabla
时间复杂度
O(n * m)
参考文献
python 代码
class Solution(object):
def printMatrix(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
res = []
if len(matrix) == 0 or len(matrix[0]) == 0:
return res
n = len(matrix)
m = len(matrix[0])
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
d = 1
x = 0
y = 0
st = [[False] * m]
for _ in range(n - 1):
st.append([False] * m)
for i in range(m * n):
res.append(matrix[x][y])
st[x][y] = True
a = x + dx[d]
b = y + dy[d]
if a < 0 or a >= n or b < 0 or b >= m or st[a][b]:
d = ( d + 1) % 4
a = x + dx[d]
b = y + dy[d]
x = a
y = b
#print(st)
return res
解释
不能直接使用st = [[False] * m] * n构建标记矩阵的原因:
[] * m 是一个浅拷贝的过程(浅拷贝:只拷贝父对象,不拷贝父对象中的字对象),具体的浅拷贝和深拷贝自行百度一下,这个也是python面试中的考点。
一个最直观的方法:每次循环,都打印st就可以看出其中的差别