zoukankan      html  css  js  c++  java
  • leetcode刷题-54-螺旋矩阵

    问题描述

    给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

    示例

    示例 1:

    输入:
    [
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ]
    ]
    输出: [1,2,3,6,9,8,7,4,5]
    示例 2:

    输入:
    [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9,10,11,12]
    ]
    输出: [1,2,3,4,8,12,11,10,9,5,6,7]

    实现

    1.模拟螺旋

    def spiralOrder(self, matrix):
            def spiral_coords(r1, c1, r2, c2):
                for c in range(c1, c2 + 1):
                    yield r1, c
                for r in range(r1 + 1, r2 + 1):
                    yield r, c2
                if r1 < r2 and c1 < c2:
                    for c in range(c2 - 1, c1, -1):
                        yield r2, c
                    for r in range(r2, r1, -1):
                        yield r, c1
    
            if not matrix: return []
            ans = []
            r1, r2 = 0, len(matrix) - 1
            c1, c2 = 0, len(matrix[0]) - 1
            while r1 <= r2 and c1 <= c2:
                for r, c in spiral_coords(r1, c1, r2, c2):
                    ans.append(matrix[r][c])
                r1 += 1; r2 -= 1
                c1 += 1; c2 -= 1
            return ans
    
    

    2 使用转置矩阵,此为评论区的大佬的答案

    def spriral_order(matrix):
        """
       使用zip map函数 直接对矩阵进行旋转
       要注意,旋转之后最后一列应该转为第一行 所以需要使用[::-1]
        """
        res = []
        while matrix:
            res += matrix.pop(0)
            matrix = list(map(list, zip(*matrix)))[::-1]
    
        return res
    
  • 相关阅读:
    文件夹打开对话框
    文件打开对话框
    HOOK函数(二)——全局HOOK
    HOOK函数(一)——进程内HOOK
    抓包
    List 访问
    坑爹的EL 表达式。
    tomcat 虚拟目录的安全问题
    框架
    程序员相关词汇
  • 原文地址:https://www.cnblogs.com/liuheblog/p/12296389.html
Copyright © 2011-2022 走看看