题解 | #顺时针打印矩阵#
顺时针打印矩阵
https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
思路:添加第一层 ——> 逆转矩阵 ——> 继续添加第一层,直到矩阵为空。
1.利用zip函数打包,可以转换矩阵的两个维度
时间复杂度,压入一层后,打包再转换为列表的时间复杂度 = 这层的长度。最终的时间复杂度,相对于遍历所有元素,即m*n
class Solution: def printMatrix(self, matrix): res = [] while matrix: res += matrix.pop(0) matrix = list(zip(*matrix))[::-1] # 解包矩阵,打包逆转维度,再逆转方向 return res
2.手写 旋转矩阵函数
时间复杂度应该比zip函数大挺多,因为整个矩阵重写了。而zip 函数本身在 O(1) 时间内运行,只是在list化的时候才O(n)。
循环法
class Solution: def printMatrix(self, matrix: List[List[int]]) -> List[int]: res = [] a = [0] while a: a = [] res.extend(matrix[0]) for i in range(len(matrix[0])): a.append( [matrix[j][len(matrix[0]) - i - 1] for j in range(1, len(matrix))] ) matrix = a return res
递归法
class Solution: def printMatrix(self, matrix: List[List[int]]) -> List[int]: res = [] def reverse(matrix): if not matrix: return a = [] res.extend(matrix[0]) for i in range(len(matrix[0])): a.append( [matrix[j][len(matrix[0]) - i - 1] for j in range(1, len(matrix))] ) reverse(a) reverse(matrix) return res