螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix

思路:
最直接的方法便是对矩阵进行一圈圈的螺旋遍历,首先最外层一圈,第一行最后一行直接相加加,第一列和最后一列采用遍历,注意螺旋遍历后要将已遍历过的数组pop出,以方便下一圈的遍历。
同时需要加一个判断语句,若矩阵只剩下一行或一列需单独处理,防止out range
代码附下,应该还可以简化不少

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        def out(matrix):
            cnt = []
            if len(matrix) == 1 :
                cnt += matrix[0]
            elif len(matrix[0]) == 1:
                for i in matrix:
                    cnt += i
            else:
                cnt += matrix[0]
                matrix.pop(0)
                for i in range(len(matrix)-1):
                        cnt += [matrix[i][-1]]
                        matrix[i].pop(-1)
                cnt += matrix[-1][::-1]
                matrix.pop(-1)
                for i in range(len(matrix)-1,-1,-1):
                        cnt += [matrix[i][0]]
                        matrix[i].pop(0)
            return cnt
        cnt = []
        num = len(matrix)*len(matrix[0])
        while len(cnt) != num:
            cnt += out(matrix)
        return cnt

思路2:
使用zip,zip函数可以将多个列表打包,也可以将一个多维列表解包,详情见zip函数用法
所以可以将矩阵转置后逆向输出得到结果
代码附下

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        res=[]
        while matrix:
            res += list(matrix[0])
            matrix = list(zip(*(matrix[1:])))[::-1]
        return res
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值