• Datawhale编程实践(LeetCode 腾讯精选练习50)Task7


    1.螺旋矩阵https://leetcode-cn.com/problems/spiral-matrix/

    看到这题我第一时间想到的也是用辅助矩阵visited,时间复杂度和空间复杂度都是O(mn)

     1 class Solution:
     2     def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
     3         if not matrix or not matrix[0]:
     4             return list()
     5         
     6         rows, columns = len(matrix), len(matrix[0])
     7         visited = [[False] * columns for _ in range(rows)]
     8         total = rows * columns
     9         order = [0] * total
    10 
    11         directions = [[0, 1], [1, 0], [0, -1], [-1, 0]]
    12         row, column = 0, 0
    13         directionIndex = 0
    14         for i in range(total):
    15             order[i] = matrix[row][column]
    16             visited[row][column] = True
    17             nextRow, nextColumn = row + directions[directionIndex][0], column + directions[directionIndex][1]
    18             if not (0 <= nextRow < rows and 0 <= nextColumn < columns and not visited[nextRow][nextColumn]):
    19                 directionIndex = (directionIndex + 1) % 4
    20             row += directions[directionIndex][0]
    21             column += directions[directionIndex][1]
    22         return order

    看到官方还有一个按层来模拟的方法,巧妙地省去了辅助数组,节省了空间。这里有一个疑问,答案说除了输出数组以外,空间复杂度是常数,那输出数组不算吗?

     1 class Solution:
     2     def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
     3         if not matrix or not matrix[0]:
     4             return list()
     5         
     6         rows, columns = len(matrix), len(matrix[0])
     7         order = list()
     8         left, right, top, bottom = 0, columns - 1, 0, rows - 1
     9         while left <= right and top <= bottom:
    10             for column in range(left, right + 1):
    11                 order.append(matrix[top][column])
    12             for row in range(top + 1, bottom + 1):
    13                 order.append(matrix[row][right])
    14             if left < right and top < bottom:
    15                 for column in range(right - 1, left, -1):
    16                     order.append(matrix[bottom][column])
    17                 for row in range(bottom, top, -1):
    18                     order.append(matrix[row][left])
    19             left, right, top, bottom = left + 1, right - 1, top + 1, bottom - 1
    20         return order

    2.螺旋矩阵 IIhttps://leetcode-cn.com/problems/spiral-matrix-ii/

    3.旋转链表https://leetcode-cn.com/problems/rotate-list/

  • 相关阅读:
    如何使用NuGet package .nupkg文件?
    利用Z.Expressions.Eval表达式求值
    表达式实现填写“阶段标记”属性
    NX导入DWG失败
    简单工厂模式(Simple Factory Pattern)
    电脑装系统蓝屏未解决
    idea intellij 配置总结
    poiexcel 笔记
    Springboot
    Springboot--maven命令子模块单独打包
  • 原文地址:https://www.cnblogs.com/zmbreathing/p/datawhale_leetcode_task7.html
Copyright © 2020-2023  润新知