力扣HOT100之矩阵:48. 旋转图像

力扣HOT100之矩阵:48. 旋转图像_第1张图片
这道题本来想用剥洋葱的办法的,一直写不对,放弃了。。。直接去看题解,用剥洋葱其实也可以做,就是要从外层处理到内层,每一个边界上的元素为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;
            }
        }
    }
};

你可能感兴趣的:(力扣HOT100之矩阵:48. 旋转图像)