其实主要就是两次翻转,把注意力放在矩形的四个角上,顺时针赚90度,其实可以转换成"/"对角线翻转一次,然后上下对称翻转一次,具体看代码
例如:
最初
[[1,2,3],
[4,5,6],
[7,8,9]]
首先"/"对角线翻转
[[9,6,3],
[8,5,2],
[7,4,1]]
然后上下对称翻转
[[7,4,1],
[8,5,2],
[9,6,3]]
class Solution {
public:
vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) {
// write code here
//"/"对角线翻转
for(int i=0; i<n; ++i){
for(int j=0; j+i<n; ++j){
int temp = mat[i][j];
mat[i][j] = mat[n-j-1][n-i-1];
mat[n-j-1][n-i-1] = temp;
// swap(mat[i][j], mat[n-j-1][n-i-1]);
}
}
//上下翻转
for(int i=0; i<n/2; ++i){
for(int j=0; j<n; ++j){
int temp = mat[i][j];
mat[i][j] = mat[n-i-1][j];
mat[n-i-1][j] = temp;
// swap(mat[i][j], mat[n-i-1][j]);
}
}
return mat;
}
};
// {
// [[1,2,3],
// [4,5,6],
// [7,8,9]]
// [[9,6,3],
// [8,5,2],
// [7,4,1]]
// [[7,4,1],
// [8,5,2],
// [9,6,3]]
// }