LeetCode 54. 螺旋矩阵

题目

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


方法

思路同上,需要注意的是此矩阵行数和列数可以不同,所以在输出最后几个数的时候需要分类讨论。

  • 当此矩阵的行数等于列数且行数列数为奇数时,无法通过 while 循环输出最后一个数
    例如:
    matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    起始值:left = 0 right= 2 up = 0 down = 2
    第一次循环后:left = right = up = down = 1
    无法继续进入循环,但仍剩余数字 5
  • 当此矩阵的行数小于列数且行数为奇数时,无法通过 while 循环输出最内层行的所有数
    例如:
    matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
    起始值:left = 0 right= 3 up = 0 down = 2
    第一次循环后:left = 1 right = 2 up = down = 1
    无法继续进入循环,但仍剩余数字 6 和 7
  • 当此矩阵的行数大于列数且列数为奇数时,无法通过 while 循环输出最内层列的所有数
    例如:
    matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    起始值:left = 0 right= 2 up = 0 down = 3
    第一次循环后:left = right = 1 up = 1 down = 2
    无法继续进入循环,但仍剩余数字 5 和 8
class Solution(object):
    def spiralOrder(self, matrix):
        m = len(matrix)
        n = len(matrix[0])

        left = 0
        right = n - 1
        up = 0
        down = m - 1

        result = []

        if matrix is None:
            return result

        while left < right and up < down:
            
            for x in range(left, right):
                result.append(matrix[up][x])
            
            for x in range(up, down):
                result.append(matrix[x][right])

            for x in range(right, left, -1):
                result.append(matrix[down][x])

            for x in range(down, up, -1):
                result.append(matrix[x][left])
            
            left = left + 1
            right = right - 1
            up = up + 1
            down = down - 1

        if m == n and m % 2 == 1:
            result.append(matrix[m//2][n//2])
        elif left < right and up == down:
            for x in range(left, right + 1):
                result.append(matrix[up][x])
        elif left == right and up < down:
            for x in range(up, down + 1):
                result.append(matrix[x][left])

        return result
相关知识
  • len(list):
    计算列表的元素个数
  • list.append():
    向列表中添加元素
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容