首页 > 编程语言 > 详细

【Leetcode 数组】 螺旋矩阵(54)

时间:2019-12-31 10:03:08      阅读:90      评论:0      收藏:0      [点我收藏+]

题目

给定一个包含?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]  # 上
        ]

代码实现:

class Solution:
    # Time: O(N),N为数值个数
    def spiralOrder(self, matrix):
        if not matrix:
            return []
        ans = []
        Y, X = len(matrix[0]), len(matrix)
        z = [
            [0, 1],  # 右
            [1, 0],  # 下
            [0, -1],  # 左
            [-1, 0]  # 上
        ]
        x = y = 0
        while len(ans) != X * Y:
            if matrix[x][y] != float('-inf'):
                ans.append(matrix[x][y])
                matrix[x][y] = float('-inf')
            while x + z[0][0] < X and y + z[0][1] < Y and matrix[x + z[0][0]][y + z[0][1]] != float('-inf'):  # 向右
                x = x + z[0][0]
                y = y + z[0][1]
                if matrix[x][y] != float('-inf'):
                    ans.append(matrix[x][y])
                    matrix[x][y] = float('-inf')
            while x + z[1][0] < X and y + z[1][1] < Y and matrix[x + z[1][0]][y + z[1][1]] != float('-inf'):  # 向下
                x = x + z[1][0]
                y = y + z[1][1]
                if matrix[x][y] != float('-inf'):
                    ans.append(matrix[x][y])
                    matrix[x][y] = float('-inf')
            while x + z[2][0] < X and y + z[2][1] < Y and matrix[x + z[2][0]][y + z[2][1]] != float('-inf'):  # 向左
                x = x + z[2][0]
                y = y + z[2][1]
                if matrix[x][y] != float('-inf'):
                    ans.append(matrix[x][y])
                    matrix[x][y] = float('-inf')
            while x + z[3][0] < X and y + z[3][1] < Y and matrix[x + z[3][0]][y + z[3][1]] != float('-inf'):  # 向上
                x = x + z[3][0]
                y = y + z[3][1]
                if matrix[x][y] != float('-inf'):
                    ans.append(matrix[x][y])
                    matrix[x][y] = float('-inf')
        return ans


s = Solution()
print(s.spiralOrder([
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
]))   

# [1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7]

【Leetcode 数组】 螺旋矩阵(54)

原文:https://www.cnblogs.com/ldy-miss/p/12122617.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!