博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
48. Rotate Image
阅读量:5942 次
发布时间:2019-06-19

本文共 1009 字,大约阅读时间需要 3 分钟。

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Follow up:

Could you do this in-place?

来源: 

分析

方法1:

关键在于找到旋转90°的关系
567993-20170209204159557-521229875.png
假设 
a:(i,j),那么
b: (j,n-1-i)
c: (n-1-j,i)
d: (n-1-i,n-1-j)
依次交换就是了,循环的方式是:
从最外层一圈操作,然后往内圈重复步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class 
Solution {
public
:
    
void 
rotate(vector<vector<
int
>>& matrix) {
        
int 
n = matrix.size();
        
for
(
int 
i = 0; i < n/2; ++i){
            
for
(
int 
j = i; j < n - 1 -i; ++j){
                
int 
tmp = matrix[i][j];
                
matrix[i][j] = matrix[n-1-j][i];
                
matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
                
matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
                
matrix[j][n-1-i] = tmp;
            
}
        
}
    
}
};

方法2

先将矩阵转置,然后对每一行逆序
1
2
3
4
5
6
7
8
9
10
11
12
class 
Solution {
public
:
    
void 
rotate(vector<vector<
int
>>& m) {
        
int 
n = m.size();
        
for
(
int 
i=0; i<n; i++)
            
for
(
int 
j=0; j<i; j++)
                
swap(m[i][j], m[j][i]);
         
        
for
(
int 
i=0; i<n; i++)
            
reverse(m[i].begin(), m[i].end());
    
}
};
类似的,如果想要得到逆时针90度,那么就先对每一行求逆,然后再转置

转载于:https://www.cnblogs.com/zhxshseu/p/584faf35ab38d775029885ef8788db53.html

你可能感兴趣的文章
170多个Ionic Framework学习资源(转载)
查看>>
Azure:不能把同一个certificate同时用于Azure Management和RDP
查看>>
Directx11教程(15) D3D11管线(4)
查看>>
Microsoft Excel软件打开文件出现文件的格式与文件扩展名指定格式不一致?
查看>>
ios ble 参考
查看>>
linux中注册系统服务—service命令的原理通俗
查看>>
基于托管C++的增删改查及异步回调小程序
查看>>
Oracle DBMS_STATS 包 和 Analyze 命令的区别
查看>>
linux下基本命令
查看>>
windows server 2008R2 上安装配置freesshd
查看>>
手动删除SVCH0ST.EXE的方法
查看>>
已释放的栈内存
查看>>
Android网络之数据解析----SAX方式解析XML数据
查看>>
Java递归列出所有文件和文件夹
查看>>
[关于SQL]查询成绩都大于80分的学生
查看>>
Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery
查看>>
java之ibatis数据缓存
查看>>
“TNS-03505:无法解析名称”问题解决一例
查看>>
LeetCode - Longest Common Prefix
查看>>
Android图片处理
查看>>