leetcode54. 螺旋矩阵

98 篇文章 1 订阅
83 篇文章 1 订阅

在这里插入图片描述

思路一

(常规):第一种方法是弹出第一行记入结果矩阵,然后将矩阵逆时针翻转90度,再弹出翻转后矩阵的第一行。如此循环执行以上两步,直到矩阵为空,如下图所示。**
#pic_center

也可参见剑指offer记录第30题,一样的题目

代码

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if not matrix:
            return []
        row = len(matrix)
        col = len(matrix[0])
        res = []
        tmp = []
        res.extend(matrix.pop(0))
 
        #对矩阵进行翻转
        while matrix:
            #时刻更新行、列数
            row = len(matrix)
            col = len(matrix[0])
            tmp = []
            for i in range(col-1,-1,-1):
                tmp2 = []   
                for j in range(row):
                    tmp2.append(matrix[j][i])
                tmp.append(tmp2)
            matrix = tmp
            res.extend(matrix.pop(0))
        return res

思路二:

将已经走过的地方置0,然后判断下一步是不是已经走过了,如果走过了就计算一下新的方向,拐弯:

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if not matrix:
            return []
        #di,di代表行和列的前进方向,首先取第一行,即列j进行变化
        res,i,j,di,dj = [],0,0,0,1
        for _ in range(len(matrix) * len(matrix[0])):
            res.append(matrix[i][j])
            matrix[i][j] = 0   #走过的地方置0
            #进行判断,下一步是否已经走过(即是否为0),因为可能会越界,所以要取余数
            if matrix[(i + di) % len(matrix)][(j + dj) % len(matrix[0])] == 0: 
                di,dj = dj,-di    #走过就拐弯(这里可用矩阵模拟一下,就可以归纳出这样的规律)
            i += di
            j += dj
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值