螺旋矩阵你听过?
- 2019 年 10 月 5 日
- 筆記

leetcode爬登之旅(18)
【今日知图】
屏幕移动
ctrl+b 向上翻页 ctrl+f 向下翻页 H Head 屏幕顶部 M Middle 屏幕中间 L Low 屏幕底部
0.说在前面1.螺旋矩阵2.作者的话
0.说在前面
昨天满课,我还是坚持来刷题了,写文时间是晚上10点45,刷题时间是10点,今日题目leetcode上的螺旋矩阵,这道题思路简单,实现困难,,对于考研的同学建议仔细看看,因为我们考研复试考了的。。。
算法分析及算法实现及算法思路是很重要的,每周两篇算法三部曲,你们坚持下来了?我现在坚持到第18篇了,哈哈,一起坚持下去!
下面一起来分析!
1.螺旋矩阵
题目
给定一个包含 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]
思路
先从左往右移动,再从上到下移动,再从右向左移动,再从下到上移动。
分为以上四部分,也就是代码需要实现上述四个流程即可~~
最后发现自己写的代码太烂了,然后学习了一下网上的风格~,修改后如下面实现部分~
实现
class Solution: def spiralOrder(self, matrix): """ :type matrix: List[List[int]] :rtype: List[int] """ if not matrix: return [] # 最终结果 output_list = [] # 行index down = len(matrix) - 1 # 列index right = len(matrix[0]) - 1 left = 0 # 左边 up = 0 # 上边 while left <= right and up <= down: # 左到右 i = left while True: if i > right: break output_list.append(matrix[up][i]) i += 1 # 行下移 up += 1 # 上到下 j = up while True: if j > down: break output_list.append(matrix[j][right]) j += 1 # 列左移 right -= 1 # 右到左 p = right if (up <= down): while True: if p < left: break # print(matrix[down][p]) output_list.append(matrix[down][p]) p -= 1 # print("----------") # 行上移 down -= 1 # 下到上 q = down if (left <= right): while True: if q < up: break output_list.append(matrix[q][left]) q -= 1 left += 1 return output_list
分析
时间复杂度:O(n^2),空间复杂度:O(n)
击败人数:82.62%,耗时44ms
学习文章 https://blog.csdn.net/acttell/article/details/80789299