剑指 Offer 29. 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例 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]

方法:
i,j为两个指针;n和m分别为列行最大序号;p为循环计数,第p次大循环;stop为总个数,当re数组中有stop个数时截止。

  1. 右→下→左→上,为一个循环
  2. 在“右”当中:i 不变,j++,至最大,最大=n-p
  3. 在“下”当中:j 不变,i++,至最大,最大=m-p
  4. 在“左”当中:i不变,j–,至最小,最小=p
  5. 在“上”之前p = p+1,要注意再循环末尾“上”中边界就变了
  6. 在“上”当中:j不变,i–,至 最小 ,最小=p

在这里插入图片描述
Python代码:

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if matrix == []:
            return matrix 
        m = len(matrix)-1
        n = len(matrix[0])-1
        i, j = 0, 0
        p = 0
        re = []
        stop = (n+1)*(m+1)

        re.append(matrix[i][j])
        if stop == 1:
            return re 
        while(1):
            
            while(j != (n-p)):
                j+=1
                re.append(matrix[i][j])
                if len(re) == stop:
                    return re
            while(i != (m-p)):
                i+=1
                re.append(matrix[i][j])
                if len(re) == stop:
                    return re
            while(j != p):
                j-=1
                re.append(matrix[i][j])
                if len(re) == stop:
                    return re
            p+=1
            while(i != p):
                i-=1
                re.append(matrix[i][j])
                if len(re) == stop:
                    return re

感冒了,边擦鼻涕边写的思路,若有不对的地方,还望指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值