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]
    

    解答

    像搜索一样,定义一个表示上下左右移动的数组。可代码量,哭辽...

    z = [
                [0, 1],  # 右
                [1, 0],  # 下
                [0, -1],  # 左
                [-1, 0]  # 上
            ]
    

    2020.5.30更新:不用定义移动数组,直接计算就OK。

    (2020.5.30更新)代码实现:

    class Solution:
        # Time: O(N),N为数值个数
        def spiralOrder(self, a):
            if not a:
                return []
            X, Y = len(a), len(a[0])
            x, y = 0, 0
            l = []
    
            while len(l) < X*Y:
                if a[x][y] != float('inf'):
                    l.append(a[x][y])
                    a[x][y] = float('inf')
                while y+1 < Y and a[x][y+1] != float('inf'):  # 向右
                    y += 1
                    l.append(a[x][y])
                    a[x][y] = float('inf')
                while x+1 < X and a[x+1][y] != float('inf'):  # 向下
                    x += 1
                    l.append(a[x][y])
                    a[x][y] = float('inf')
                while y-1 >= 0 and a[x][y-1] != float('inf'):  # 向左
                    y -= 1
                    l.append(a[x][y])
                    a[x][y] = float('inf')
                while x-1 >= 0 and a[x-1][y] != float('inf'):  # 向上
                    x -= 1
                    l.append(a[x][y])
                    a[x][y] = float('inf')
            return l
    
    
    s = Solution()
    ans = s.spiralOrder([[1, 2, 3, 4], 
                         [5, 6, 7, 8], 
                         [9, 10, 11, 12], 
                         [13, 14, 15, 16]
                         ])
    print(ans)
    
    # [1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10]
    
  • 相关阅读:
    【转】python 面向对象(进阶篇)
    【转】Python 面向对象(初级篇)
    【转】MySQL— pymysql and SQLAlchemy
    【转】MySQL— 索引
    pycharm+pygame飞机大战
    python+Django创建购物网站(二)
    python语言系统学习(三)
    复习NLP-实战(九)----语言模型
    Linux常用命令--跟K8S相关
    Nginx-ingress-controller部署应用
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/12122617.html
Copyright © 2011-2022 走看看