顺时针旋转矩阵
来源:互联网 发布:身骑白马周深知乎 编辑:程序博客网 时间:2024/06/01 07:18
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。
这个题目在leetcode做过,当时用的C++,基本思想就是固定处于对角线上两个顶点值,比如(0,n-1) 将最外面一圈的数字经过一个比较复杂的交换达到顺时针旋转一周的效果,然后把顶点逐渐往里缩,变成(1,n-2),直到全部旋转完成。
class Rotate {public: vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) { subrotate(mat,0,n-1); return mat; }void subrotate(vector<vector<int>>& matrix,int start,int end){ while(start<end){ for(int i=0;i<end-start;i++){ int temp=matrix[end-i][start]; matrix[end-i][start]=matrix[end][end-i]; matrix[end][end-i]=matrix[start+i][end]; matrix[start+i][end]=matrix[start][start+i]; matrix[start][start+i]=temp; } start++; end--; } }};然而今天在讨论区看到了python的解法,真是知道真相的我眼泪掉下来。。。
# -*- coding:utf-8 -*-class Rotate: def rotateMatrix(self, mat, n): return [x[::-1] for x in zip(*mat)]
怎么个意思呢?
zip的作用:比如X=[1,2,3],Y=[4,5,6],Z=[7,8,9]
a=zip(X,Y,Z)
a就为[(1,4,7),(2,5,8),(3,6,9)]
u=zip(*a)
u就为[(1,2,3),(4,5,6),(7,8,9)]
上面两者相当于一个逆向过程。
而x[::-1]就是把一个矩阵倒置了。
整个过程相当于把矩阵转置,再对每行进行倒置,刚好相当于顺时针旋转90度。
那么如果题目变成逆时针旋转呢,自然也可以用C++那样的方法去解,python的话只要先每行倒置,再进行转置就可以了。
python真是个奇妙的语言。
0 0
- 【矩阵】矩阵顺时针旋转
- 矩阵顺时针旋转
- 顺时针旋转矩阵
- 顺时针旋转矩阵
- 顺时针旋转矩阵
- 顺时针旋转矩阵
- 顺时针旋转矩阵
- 顺时针旋转矩阵
- 矩阵顺时针旋转
- 矩阵顺时针旋转
- 顺时针旋转矩阵
- 顺时针打印矩阵(旋转矩阵)
- 矩阵顺时针旋转90度
- 顺时针打印旋转打印矩阵
- 矩阵顺时针旋转90度
- 校招真题-其他-顺时针旋转矩阵
- 矩阵顺时针旋转90度
- 矩阵顺时针旋转90度
- Educational Codeforces Round 11——A. Co-prime Array(map+vector)
- c++类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast)
- http://blog.csdn.net/neiloid/article/details/7037093#
- Java泛型机制
- 《Effective STL》学习笔记(第二部分)
- 顺时针旋转矩阵
- 单入口nginx apache 配置
- 第一次启动APP,欢迎页出现一次
- 返回N的二进制表示中1的个数
- PHP入门学习笔记之—— PHP支持的数据类型
- 【步兵 cocos-js】prototype在开发中的妙处
- Socket.io 400 (Bad Request)
- 《Effective STL》学习笔记(第三部分)
- Mac MySQL修改密码