顺时针打印矩阵

题目:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:

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.

思路:

注意到是依照环打印矩阵的。所以可以定义环的左上角和右下角,确定环的位置,再依次打印。注意环在不停收缩。

在这种思路下要注意两点:一个是环的上面一横和下面一横是否重复,一个是四条线的起点和重点是否重合。一不注意就容易写错。

下面是代码:

class Solution:
    # matrix类型为二维列表,需要返回列表
    def printMatrix(self, matrix):
        if not matrix:
            return
        row_num = len(matrix)
        col_num = len(matrix[0])
        mark, res = 0, []
        while 2 * mark < min(row_num, col_num):
            for cj in range(mark, col_num - mark):
                res.append(matrix[mark][cj])
            for ri in range(mark + 1, row_num - mark):
                res.append(matrix[ri][col_num - 1 - mark])
            if row_num - 1 - mark > mark:
                for cj in range(col_num - 2 - mark, mark - 1, -1):
                    res.append(matrix[row_num - 1 - mark][cj])
            if col_num - 1 - mark > mark:
                for ri in range(row_num -2 - mark, mark, -1):
                    res.append(matrix[ri][mark])
            mark += 1
        return res
原文地址:https://www.cnblogs.com/plank/p/9147689.html