翻转方阵
来源:互联网 发布:怎么选购冰箱知乎 编辑:程序博客网 时间:2024/05/01 22:46
描述:给定一个N*N的矩阵,要求按顺时针旋转矩阵九十度,并返回旋转后的矩阵。
思路一:申请一个N*N空间,存储原始矩阵副本,原始矩阵的第i行是旋转九十度后的第(n-1-i)列,第j列是旋转九十度后的第j行。时间复杂度为平方级,空间复杂度为平方级。
class Solution{public:void rotateMatrix(int &A[][],int n){int **copy=new int *[n];for(int i=0;i<n;i++) copy[i]=new int[n];for(int i=0;i<n;i++) for(int j=0;j<n;j++) copy[i][j]=A[i][j];for(int i=0;i<n;i++) for(int j=0;j<n;j++) A[j][n-1-i]=copy[i][j];delete [][] copy; }};思路二:可以将旋转九十度分成两个步骤:1.首先按照副对角线交换元素;2.按照水平中线交换元素。如图:
class Solution{public:void rotateMatrix(int &A[][],int n){for(int i=0;i<n;i++)//先按照副对角线交换对称元素 {for(int j=0;j<n-i;j++){swap(A[i][j],A[n-1-i][n-1-j]);} } for(int i=0;i<n/2;i++)//再按照水平中心线交换对称元素{for(int j=0;j<n;j++){swap(A[i][j],A[n-1-i][j]);} } }};或者1.先按照水平中心线交换元素;2.然后按照主对角线交换元素。如图:
class Solution{public:void rotateMatrix(int &A[][],int n){for(int i=0;i<n/2;i++)//先按照水平中心线交换对称元素{for(int j=0;j<n;j++){swap(A[i][j],A[n-1-i][j]);} } for(int i=0;i<n;i++)//再按照主对角线交换对称元素 {for(int j=i+1;j<n;j++){swap(A[i][j],A[j][i]);}} }};两种方案的时间复杂度都有线性,空间复杂度都为1。
0 0
- 翻转方阵
- 方阵
- 九度oj:对矩阵任意子方阵进行多种翻转操作
- 翻转
- 翻转
- 翻转
- 蛇形方阵
- 拉丁方阵
- 拉丁方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 打印方阵
- 拉丁方阵
- 螺旋方阵
- 螺旋方阵
- 拉丁方阵
- 螺旋方阵
- 同一个高度
- 十三.加速度传感器
- 使用Cocoapods创建私有podspec
- Java之System.arraycopy实现数组拷贝-类似C语言的memcpy
- 【MyBatis框架点滴】——MyBatis二级缓存
- 翻转方阵
- client.c和server.c 网络套接字socket编程热身程序
- loaded the "XXXView" nib but the view outlet was not set 解决方案
- jquery特效-鼠标点击上下伸缩式菜单
- 个人博客
- 安心练打字吧
- Hotfix安卓热部署方案https://github.com/dodola/HotFix
- Java环境变量配置备忘
- 十四.给UIView子类设置阴影,包括各种控件