这道题本来想用剥洋葱的办法的,一直写不对,放弃了。。。直接去看题解,用剥洋葱其实也可以做,就是要从外层处理到内层,每一个边界上的元素为matrix[0].size() - 1个,这样一来,四条边界上的元素个数都相同,然后直接狂用swap函数交换就完事了,但是我看评论区还有更加简洁的办法,就是通过找规律可以看出来,将矩阵顺时针旋转90°等价于先将矩阵进行转置,再逐行逆序排列,我想了一下,剥洋葱还是有点太麻烦了,然后就直接用这个简单的思路,代码也很好写。
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
//顺时针旋转90度等价于矩阵先做转置再逐行逆序
//1.对矩阵进行转置
for(int i = 0; i < matrix.size(); ++i){
for(int j = 0; j < i; ++j)
swap(matrix[i][j], matrix[j][i]);
}
//2.逐行逆序
for(int i = 0; i < matrix.size(); ++i){
int left = 0, right = matrix[i].size() - 1;
while(left < right){
swap(matrix[i][left], matrix[i][right]);
++left;
--right;
}
}
}
};