顺时针打印矩阵
题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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