题意: 90度翻转二维矩阵,且要求额外空间开销尽可能地小。
思路:弄清楚90度翻转时,每个点翻转的规律即可
假设该点的行列坐标为 (x, y)
则翻转后他的位置为 (y,n-1-x)
而这里要求空间开销小,即不应重建一个新矩阵。
则我们应当一个个点去翻转。
我用num1存当前点的值,num2为翻转后位置处的值
令下一点值 = 当前的值
接着继续这个过程,进行4次后, 一次翻转完毕,一次翻转 翻转了4个数字。
注意每次翻转的起始位置,i=k, j=k -> n-1-k
当i<n/2时,不需要再翻转。
class Solution {
public:
void change(int i,int j, vector<vector<int>>& matrix){
int nj,ni,n,num1,num2,m ;
n = matrix.size();
m = 4;
num1 = matrix[i][j];
while(m--){
ni = j;
nj = n - 1 - i;
num2 = matrix[ni][nj];
matrix[ni][nj] = num1;
i = ni;j = nj;
num1 = num2;
}
}
void rotate(vector<vector<int>>& matrix) {
// 0 1-> 1 3-> 3 2-> 2 0
int n = matrix.size();
int temp,k = 0, m;
int num1, num2;
int i, j, ni, nj;
i = 0;
while(i < n/2 ){
for(j = i;j < n - i - 1;j++){
change(i,j,matrix);
}
i++;
}
return ;
}
};