• 每一圈的打印,很自然便可以想到遵循从左到右,从上到下,从右到左,从下到上的顺序。但是这里需要注意的是最后一圈的打印,由于矩阵并不一定是方阵,最后一圈有可能退化为只有一行,只有一列,甚至只有一个数,因此要注意进行判断,避免重复打印。
  • 注意可能在一开始只有一列或者一行数据,所以要对行和列的数量进行判断

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