(python version) 劍指offer 29. 顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
來源:力扣(LeetCode)
(python version) 劍指offer

解题思路

1.剑指基本思路

建立边界条件 + 循环。从最外层开始,分成四步骤。

(a ) matrix、columns 与 rows 的个数,建立第一步至第四步的解法。
(b )设置边界条件,即:当 columns >2 and rows >2.
(c ) 边界条件以外的特殊案例,包含了四种情况(讨论如下),如输入一个 4x4矩阵,剩馀的会是最中间的 2x2 矩阵,符合额外条件讨论的第四种(IV)。
在这里插入图片描述
在这里插入图片描述

2.高级解法(参考别人的灵活解法)

每一次取 matrix 的 first row ,存进返回结果 res,并且逆时针 90 度翻转,终止条件为 matrix 不存在时。

  • 思路简化,代码行数较少,但是与方法一相比耗时较久。

  • 由于下一组要取的 list 是 [6, 9]

    • 使用 zip() 函数,将现有 list(*matrix) => [(4, 7), (5, 8), (6, 9) ]
    • 并且翻转 List => [(6, 9), (5, 8), (4, 7)]
  • 重复此动作,直到不存在 matrix

在这里插入图片描述

高级解法中的技巧笔记

  • List 翻转

    • list.reverse()
    • list[::-1] 順序相反操作
    • list[2::-1] 順序相反操作,从index=2开始
      • e.g. a = [1,2,3,4] ; a[2::-1] = [3,2,1]
  • zip 用法

    • 将多个 List 当中的元素组成元组返回,当List长度不一的时候,元素个数与最短的列表一致

    a = [ 1 , 2 , 3 ]
    b = [ 4 , 5 , 6 ]
    c = [ 4 , 5 , 6 , 7 , 8 ]
    list(zip(a,b)) > [(1,4), (2,5), (3,6)]
    list(zip(a,c)) > [(1,4), (2,5), (3,6)]

  • List extend

    • 当要合并两个 List 时可用

    a = [1,2,4,5]
    b = [3,5,6,7]
    a.extend(b) > [1, 2, 4, 5, 3, 5, 6, 7]

Python 代码

# 按照剑指的基本思路
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if not
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值