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]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

代码

小结:首先确定四个遍历的方向,横坐标和纵坐标的方向不同。其次,什么时候不能朝着当前方向继续走,注意判断条件。

class Solution(object):
    def spiralOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
        res = []
        row_n = len(matrix)
        if row_n == 0:
            return res
        col_n = len(matrix[0])
        smatrix = [[False] * col_n for _ in range(row_n)]
        row_direction = [0, 1, 0, -1]
        col_direction = [1, 0, -1, 0]
        r = c = d = 0
        for _ in range(row_n * col_n):
            res.append(matrix[r][c])
            smatrix[r][c] = True
            nr, nc = r + row_direction[d], c + col_direction[d]
            //是否可以沿着当前方向继续走
            if 0 <= nr < row_n and 0 <= nc < col_n and not smatrix[nr][nc]:
                r, c = nr, nc
            else:
                d = (d + 1) % 4
                r += row_direction[d]
                c += col_direction[d]
        return res

 

你可能感兴趣的:(每天一道leetcode,数组)