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

来源:互联网 发布:中印陆军对比知乎 编辑:程序博客网 时间:2024/05/28 23:09

Rotate Image

原题链接Rotate Image
这里写图片描述
原地旋转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;            }        }       }};
原创粉丝点击