当前位置: 移动技术网 > IT编程>脚本编程>Python > 顺(逆)时针打印矩阵

顺(逆)时针打印矩阵

2020年08月10日  | 移动技术网IT编程  | 我要评论
顺时针打印矩阵剑指 Offer 29. 顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]解决方法先把最前面的元素提取了。然后将剩下元素逆时针旋转 90 度,再依次循环进行。逆时针:竖排提取 → 元素翻转 。def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
顺时针打印矩阵

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

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

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
解决方法

先把最前面的元素提取了。然后将剩下元素逆时针旋转 90 度,再依次循环进行。

逆时针:竖排提取 → 元素翻转 。

def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
    res = []
    while matrix:
        res += matrix.pop(0)  # 列表后面可以追加元组,相当于 extend
        # res.extend(matrix.pop(0))  # 使用这一句代替上面也行
        # res = res + matrix.pop(0)  # 列表却不可以连接元组 错误
        matrix = list(zip(*matrix))[::-1]
    return res

其中,matrix.pop(0) 是元组类型,追加 +=到了列表之后。使用连接(concatenate)+ 会报错的。

这一点微妙之处,也能看出 Python 实在是很灵活。
例如:

a = [1, 2, 4]
a += {5, 6, 7}
a += 8, 9
print(a)

结果:[1, 2, 4, 5, 6, 7, 8, 9]


扩展:逆时针打印矩阵
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
    matrix = list(zip(*matrix))  # 转置
    res = list(matrix.pop(0))
    while matrix:
        matrix = list(zip(*matrix))[::-1]
        res += matrix.pop(0)
    return res

需要先转置提取,才能逆时针旋转,并提取元素。

总结

要求格式为:List[List[int]

  • 顺时针旋转 90 度:list(map(list, zip(*(matrix[::-1]))))
  • 逆时针旋转 90 度:list(map(list, zip(*matrix))))[::-1]
  • 转置:list(map(list, zip(*matrix))))

注意:Python 语法比较简洁,其中上面语法就涉及到:反序、解包、打包、映射等,若看不懂可以在纸上画画,好好理解一下。

转置完再翻转就是逆时针,而翻转完再转置就是顺时针旋转了。

本文地址:https://blog.csdn.net/weixin_43932942/article/details/107886072

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网