题目链接:48.旋转图像

题解:

将一个矩阵反转,顺时针,逆时针,以及180度反转!

有更精妙的方法吗?详见下文!

题目简述:

将一个矩阵顺时针反转90度!

不能使用额外的数组!

题解:

第一想法:转圈来回换,例如1 3 9 7,2 6 8 4, …

但是找下标的关系会很复杂,我第一次就是这样做的,果然,找下标成功将我绕晕了!

有没有更好的办法了?

有的!

  • 对于顺时针90度,先按主对角线对称,再按中间竖线对称!

  • 对于逆时针90度,先按主对角线对称,再按中间横线对称!

  • 对于180度,先按主对角线对称,再按副对角线对称!

顺时针90度:

逆时针90度:

180度

AC代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i = 0; i < n; i++){
for(int j = 0; j < i; j++){
swap(matrix[i][j], matrix[j][i]);
}
}
for(int i = 0; i < n; i++){
for(int j = 0, k = n - 1; j < k; j++, k--){
swap(matrix[i][j], matrix[i][k]);
}
}
}
};