概述
分情况模拟
Time:
O
(
n
)
O(n)
O(n)
Space:
O
(
n
)
O(n)
O(n)
from functools import reduce
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
def helper(left,right,top,down):
output=[]
if left==right:
output=[matrix[i][left] for i in range(top,down+1)]
elif top==down:
output=matrix[top][left:right+1]
else:
output.extend(matrix[top][left:right]) #right stroke
output.extend([matrix[i][right] for i in range(top,down)]) #down stroke
output.extend(matrix[down][left+1:right+1][::-1]) #left stroke
output.extend([matrix[i][left] for i in range(top+1,down+1)][::-1]) #up stroke
return output
tally=[]
left,right,top,down=0,len(matrix[0])-1,0,len(matrix)-1
while left<=right and top<=down: #not sure
tally.append(helper(left,right,top,down))
left,right,top,down=left+1,right-1,top+1,down-1
return reduce(lambda a,b:a+b,tally)
神仙解法(StefanPochmann)
1.[*matrix.pop(0)]
去掉第一行
2.[*zip(*matrix)][::-1]
逆时针旋转矩阵(转置+逆向行)
3.然后对旋转后的矩阵递归
def spiralOrder(self, matrix):
return matrix and [*matrix.pop(0)] + self.spiralOrder([*zip(*matrix)][::-1])
最后
以上就是忧伤电脑为你收集整理的leetcode - Spiral Matrix的全部内容,希望文章能够帮你解决leetcode - Spiral Matrix所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复