题解 | #顺时针打印矩阵#

顺时针打印矩阵

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



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务