题意: 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 ; } };