地址:https://leetcode.com/problems/rotate-image/
题目:
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Note:
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.
Example 1:
Example 2:
理解:
把图片顺时针旋转。
可以先翻转,再转置。
实现:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
reverse(matrix.begin(),matrix.end());
for(int i=0;i<matrix.size();++i){
for(int j=i+1;j<matrix.size();++j)
swap(matrix[i][j],matrix[j][i]);
}
}
};
实现2:
考虑
a b
d c
把左上角的和其他三个位置分别swap也可以
b a
d c
c a
d b
d a
c b
需要确定的就是四个元素的下标。
相当于本次内循环完成最外层正方形的旋转,内层由下一个外循环中的内循环完成。
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int m = 0, n = matrix.size() - 1;
while (m < n) {
for (int i = 0; i < (n - m); ++i) {
swap(matrix[m][m + i], matrix[m + i][n]);
swap(matrix[m][m + i], matrix[n][n - i]);
swap(matrix[m][m + i], matrix[n - i][m]);
}
++m;
--n;
}
}
};