感觉优化空间还是很大,不论是时间复杂度还是空间复杂度
emmm,先实现出来吧,优化后续进行……
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
# 没有直接返回
if not matrix:
return []
# 长度为一返回第一个元素
if len(matrix) == 1:
return matrix[0]
else:
# 若元素长度不为一,则最后一行元素不做除首尾俩元素外的反转
if len(matrix[-1]) > 1:
matrix[-1] = [matrix[-1][0]] + matrix[-1][1:-1][::-1] + [matrix[-1][-1]]
# 第一行默认顺序去取
new_list = [item for item in matrix[0]]
# 头部元素
head_list = []
# 尾部元素
end_list = []
# 中间元素
middle_list = []
for index,item in enumerate(matrix[1:]):
if len(item) == 1:
end_list.append(item[0])
else:
if item:
head_list.append(item[0])
end_list.append(item[-1])
middle_list.append(item[1:-1])
# 开始拼接
res_list = new_list + end_list
if middle_list:
res_list += [item for item in middle_list[-1]]
# 拼接完成之后把middle_list 最后一个元素干掉
middle_list = middle_list[:-1]
# 开始拼接头部元素
head_list = head_list[::-1]
for index,x in enumerate(head_list):
res_list += [head_list[index]]
# 若中间元素还存在,开始递归
if middle_list:
res_next = self.spiralOrder(middle_list)
res_list += res_next
return res_list