48.旋转图像

  1. 题目链接

  2. 解题思路:要有宏观的思路,策略是一圈一圈的转换。然后每一圈,又分成一个一个的小组进行转换,见下图

  3. 代码

    class Solution {
    public:
        void rotate(vector<vector<int>>& matrix) {
            int n = matrix.size();
            for (int i = 0; i <= (n - 1) / 2; ++i) {    // 一圈一圈处理
                int begin_a = i;     // 该圈的左上角点的行
                int begin_b = i;     // 该圈的左上角点的列
                int end_a = n - 1 - i;    // 该圈的右下角点的行
                int end_b = n - 1 - i;    // 该圈的右下角点的列
                for (int g = 0; g < end_a - begin_a; ++g) {   // 这么多组
                    // 第一个点
                    int one_a = begin_a;
                    int one_b = begin_b + g;
                    // 第二个点
                    int two_a = begin_a + g;
                    int two_b = end_b;
                    // 第三个点
                    int three_a = end_a;
                    int three_b = end_a - g;
                    // 第四个点
                    int four_a = end_a - g;
                    int four_b = begin_b;
    
                    // 第一个点给到第二个点
                    int tmp1 = matrix[two_a][two_b];
                    matrix[two_a][two_b] = matrix[one_a][one_b];
    
                    // 第二个点给到第三个点
                    int tmp2 = matrix[three_a][three_b];
                    matrix[three_a][three_b] = tmp1;
    
                    // 第三个点给到第四个点
                    tmp1 = matrix[four_a][four_b];
                    matrix[four_a][four_b] = tmp2;
    
                    // 第四个点给到第一个点
                    matrix[one_a][one_b] = tmp1;
                }
            }
        }
    };
    
posted @ 2024-12-20 11:32  ouyangxx  阅读(9)  评论(0)    收藏  举报