算法(3)矩阵旋转问题

矩阵翻转问题

  • 矩阵旋转问题
    • 1. 逆时针旋转90度
    • 2. 顺时针旋转90度
    • 3. 旋转180度

矩阵旋转问题

或者图像旋转问题。

1. 逆时针旋转90度

逆时针旋转90度可以先沿左上到右下对角线翻转,再上下翻转。
如矩阵

1 2 3
4 5 6
7 8 9

首先对角线翻转,得到

1 4 7 
2 5 8
3 6 9

再上下翻转,得到

3 6 9
2 5 8
1 4 7

恰好是原矩阵逆时针旋转90度的结果。

2. 顺时针旋转90度

顺时针旋转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

恰好是原矩阵顺时针旋转90度的结果。

48. 旋转图像
实现:

void rotate(vector<vector<int>>& matrix) {
     
        int n = matrix.size();
        if(n <= 1){
     
            return;
        }
        for(int i = 0; i < n-1; i++){
     
            for(int j = 0; j < n-1-i; j++){
     
                int t = matrix[i][j];
                matrix[i][j] = matrix[n-1-j][n-1-i];
                matrix[n-1-j][n-1-i] = t;
            }
        }
        for(int i = 0; i < n / 2; i++){
     
            for(int j = 0; j < n; j++){
     
                int t = matrix[i][j];
                matrix[i][j] = matrix[n-1-i][j];
                matrix[n-1-i][j] = t;
            }
        }
    }

3. 旋转180度

旋转180度通过一次上下翻转、一次左右翻转实现,两次翻转顺序不限。
如矩阵

1 2 3
4 5 6
7 8 9

首先上下翻转,得到

7 8 9
4 5 6
1 2 3

再左右翻转,得到

9 8 7
6 5 4
3 2 1

恰好是原矩阵旋转180度的结果。

你可能感兴趣的:(C++,算法,算法,c++)