遍历矩阵每一行穷举_LeetCode:二维数组—旋转矩阵

点击上方蓝字关注我们

题目描述:“给衣服N*N的矩阵表示图像,其中每个像素的大小为4字节,设计一个算法,图像旋转90度”

示例:

matrix=[[1, 2, 3],[4, 5, 6],[7, 8, 9]]
round_matrix=[[7, 4, 1],[8, 5, 2],[9, 6, 3]]
c8f8aa183b616503ed87156c5d474bd7.gif

第一次尝试

观察数组旋转的规律,可以创建一个新的二维数组,利用循环将数据元素按照旋转规律输入到新建二维数组中

e6f0ccfd7cf2f048b6f0abbffafa1686.png

注意:range(start, stop, -1)从大到小遍历的时候,也只是取到 stop+1 的下标位置

虽然该方法解决了问题,但是占据了额外的内存(创建了新的二维数组)

本文由“壹伴编辑器”提供技术支持

算法优化——不占据额外内存

不占据内存则不能创建新的变量,而是在原数组上变动

矩阵的旋转有特别规律:

  1. 首先将矩阵的对角线元素交换

  2. 对每一行(一维数组)逆序排列

9d3f35ef5d923f09045e5ec92a7d8568.png

0720c9f2994cab068eb9b6bf326e4651.png

429198208ce4f530d623de9f494d30e8.png

注意:

  • python变量交换语法:

matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
  • 两层循环遍历的时候,注意第二层循环不是从0开始,不然每一种情况就会出现重复,最终回到原点。而是从上一个循环的 i 开始遍历。在对角线交换元素中最后一次交换,就是右下角的元素与自己交换,只有一次交换。如果从0开始,那每一个i都有三个交换

for i in range(len(matrix[0])):    for j in range(i, len(matrix)):

25e13c129163f7213d585a9e7ed8b7fb.png

好文!点个好看!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值