每日leetcode-数组-54. 螺旋矩阵

Posted LLLLgR

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日leetcode-数组-54. 螺旋矩阵相关的知识,希望对你有一定的参考价值。

分类:数组-特定顺序遍历二维数组

 

题目描述:

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

 

解题思路:每次取第一行,之后把剩下元素逆时针旋转90度,取第一行,再依次循环。

 

class Solution:
    # matrix类型为二维列表,需要返回列表
    def spiralOrder(self,matrix: List[List[int]]) -> List[int]:
        # write code here
        if not matrix:
            return []
        res = []
        while matrix:
            res.extend(matrix.pop(0))
            matrix = self.TurnM(matrix)
        return res
    
    def TurnM(self, matrix):
        if not matrix:
            return matrix
        res = []
        m = len(matrix[0])
        for i in range(m-1, -1, -1):
            res.append([line[i] for line in matrix])
        return res

自己定义翻转函数TurnM,调用时为self.函数名。

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        res = []
        while matrix: 
            res += matrix.pop(0)  # 每次提取第一排元素
            matrix = list(zip(*matrix))[::-1]   #[::-1]表示倒序输出  #将剩余的元素进行逆时针旋转九十度
        return res

zip函数:

 

        """
        1 2 3
        4 5 6
        7 8 9
        matrix.pop(0)

        4 5 6
        7 8 9
        matrix = list(zip(*matrix))[::-1]

        6 9
        5 8
        4 7
        matrix.pop(0)

        5 8
        4 7
        matrix = list(zip(*matrix))[::-1]

        8 7
        5 4
        matrix.pop(0)

        5 4
        matrix = list(zip(*matrix))[::-1]

        4
        5
        matrix.pop(0)

        5
        matrix = list(zip(*matrix))[::-1]

        5
        matrix.pop(0)

        done!
        """

 

以上是关于每日leetcode-数组-54. 螺旋矩阵的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode54. 螺旋矩阵

LeetCode 524. 通过删除字母匹配到字典里最长单词(动态规划) / 695. 岛屿的最大面积 / 54. 螺旋矩阵(背)

LeetCode54 螺旋矩阵,题目不重要,重要的是这个技巧

Leetcode 54.螺旋矩阵

Leetcode 54.螺旋矩阵

Leetcode 54.螺旋矩阵