54. 螺旋矩阵(中等)-矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

分析

  • 方向是有四个方向,转换的方式也是固定的,可以通过一个二维数组承载,然后用贪心的算法去试探下一个元素
  • 判断元素是否合适,包括是否在边界内,还有是否已经遍历过了
  • 判断是否已经遍历过了可以通过一个矩阵记录
  • 还有个更加简洁方案,就是一直在交换

方案一

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        # 用另外一个矩阵记录走过的元素索引
        # 用一个二维数组记录方向
        m, n = len(matrix), len(matrix[0])
        record_matrix = [[False for _ in range(n)] for _ in range(m)]
        direction_list = [[0, 1], [1, 0], [0, -1], [-1, 0]]

        res = [matrix[0][0]]
        record_matrix[0][0] = True

        i, j= 0, 0
        direction_index = 0

        while len(res) != m*n:
            x, y = direction_list[direction_index % 4]
            tmp_i, tmp_j = x + i, y + j
            if tmp_i >= 0 and tmp_i < m and tmp_j >=0 and tmp_j < n and record_matrix[tmp_i][tmp_j] == False:
                i, j = tmp_i, tmp_j
                record_matrix[tmp_i][tmp_j] = True
                res.append(matrix[i][j])
            else:
                direction_index += 1
            
        
        return res

方案二

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)

        for i in range(n//2):
            for j in range((n + 1)//2):

                matrix[i][j], matrix[n - j - 1][i], matrix[n-i-1][n-j-1], matrix[j][n-i-1] \
                = matrix[n-j-1][i], matrix[n-i-1][n - j- 1], matrix[j][n - i - 1], matrix[i][j]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容