leetcode 48 旋转图像

 旋转图像,想到的方法是以每一圈为单位,进行圈上的元素的旋转,完成每一个圈的旋转之后,就完成了整体的旋转,思路不困难,难度在于旋转时变量下标的确定,刚开始走了很多弯路,后来发现一定要把具体的数值写出来,找到不变的量,使其清晰起来,就会好搞很多,贴代码

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) 
    {
        int n = matrix.size();      
        for(int i = 0 ; i < n/2 ; i++)        //以圈为单位进行循环
        {
            int l = n-2*i;
            for(int j = 0 ; j < l-1 ; j++)
            {
                int temp = matrix[i][i+j];
                matrix[i][i+j] = matrix[i+l-1-j][i];
                matrix[i+l-1-j][i] = matrix[i+l-1][i+l-1-j];
                matrix[i+l-1][i+l-1-j] = matrix[i+j][i+l-1]; 
                matrix[i+j][i+l-1] = temp;
            }
        }      
    }
};

 还有一种比较巧妙的方法则是使用两次翻转来实现旋转,第一次是以水平线的上下翻转,第二次是以主对角线翻转,完成翻转后,就完成了旋转,贴代码

 

posted @ 2021-03-07 11:06  zhaohhhh  阅读(75)  评论(0)    收藏  举报