每天一道LeetCode-----顺时针旋转n×n矩阵90度

Rotate Image

原题链接Rotate Image
每天一道LeetCode-----顺时针旋转n×n矩阵90度_第1张图片
原地旋转n × n矩阵90度

正方形的旋转问题可以一圈一圈的旋转,先旋转最外层,然后内层,再内层。需要旋转的次数是矩阵行数的一半。旋转过程中元素的交换可以多次取值找规律,方法如下

matrix[i][j] -> matrix[j][n-1-i];
matrix[j][n-1-i] -> matrix[n-1-i][n-1-j];
matrix[n-1-i][n-1-j] -> matrix[n-1-j][i];
matrix[n-1-j][i] -> matrix[i][j];

实际上就是位置[i][j]旋转90度后的新位置是[j][n-i]

代码如下

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        for(int i = 0; i < n / 2; ++i)
        {
            for(int j = i; j < n - 1 - i; ++j)
            {
                /* 因为顺时针旋转,所以该值时要逆时针改 */
                int tmp = matrix[i][j];
                matrix[i][j] = matrix[n-1-j][i];
                matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
                matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
                matrix[j][n-1-i] = tmp;
            }
        }   
    }
};

你可能感兴趣的:(LeetCode)