leetcode_54.螺旋矩阵

感觉优化空间还是很大,不论是时间复杂度还是空间复杂度
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值