原地旋转,O(1)空间复杂度。
一次旋转四个点。
class Solution {
public:
void _rotate(vector<vector<int> > &matrix, int i, int j, int n){
if(n<=1)
return;
for(int q=j;q<j+n-1;++q){
int x1 = i, y1 = q;
int x2 = y1, y2 = matrix.size()-1-x1;
int x3 = y2, y3 = matrix.size()-1-x2;
int x4 = y3, y4 = matrix.size()-1-x3;
int tmp = matrix[x1][y1];
matrix[x1][y1] = matrix[x4][y4];
matrix[x4][y4] = matrix[x3][y3];
matrix[x3][y3] = matrix[x2][y2];
matrix[x2][y2] = tmp;
}
_rotate(matrix,i+1,j+1,n-2);
}
void rotate(vector<vector<int> > &matrix) {
if(matrix.empty())
return;
_rotate(matrix,0,0,matrix.size());
}
};