- 每一圈的打印,很自然便可以想到遵循从左到右,从上到下,从右到左,从下到上的顺序。但是这里需要注意的是最后一圈的打印,由于矩阵并不一定是方阵,最后一圈有可能退化为只有一行,只有一列,甚至只有一个数,因此要注意进行判断,避免重复打印。
- 注意可能在一开始只有一列或者一行数据,所以要对行和列的数量进行判断
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
if not matrix:
return []
re = []
r, c, t, b = 0, len(matrix[0]) - 1, 0, len(matrix) - 1
while r < c and t < b:
for i in range(r, c):
re.append(matrix[t][i])
for j in range(t, b):
re.append(matrix[j][c])
for m in range(c, r, -1):
re.append(matrix[b][m])
for n in range(b, t, -1):
re.append(matrix[n][r])
r += 1
c -= 1
t += 1
b -= 1
if r == c:
for i in range(t, b + 1):
re.append(matrix[i][r])
#注意这里用elif,一般不会出现两种都相等的情况,如果出现两种都相等,会把内容多存一份,所以只检查一种即可,避免重复收集
elif t == b:
for j in range(r, c + 1):
re.append(matrix[t][j])
return re