【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]  # 上
        ]

代码实现:

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]

猜你喜欢

转载自www.cnblogs.com/ldy-miss/p/12122617.html