48.Rotate Image

给定一个二维方阵,求,将此方阵顺时针旋转90度。就地交换,不引入额外的存储消耗。

Given input matrix =
[
[ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]
],

rotate the input matrix in-place such that it becomes:
[
[15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]
]

思路:
对这些坐标进行研究,可以发现坐标是有规律的,从最外围往内进行交换,设方阵为 n * n ,每一次交换3对坐标,就可以将四条边上对应的坐标给交换完,然后循环。注意往内部循环的时候,走 n/2 即可全体交换完。

难点:
难点在于对坐标的研究,比如: a00, a03, a33, a30 这4个坐标的关系,以及 a01, a13, a32, a20 ,这四个需要交换的关系,进而推导出:aij与其另外3个坐标的关系

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-i-1; j++) {
                swap(matrix[i][j], matrix[j][n - 1 - i]);
                swap(matrix[i][j], matrix[n - 1 - i][n - 1 - j]);
                swap(matrix[i][j], matrix[n-1-j][i]);
            }
        }
    }
};
原文地址:https://www.cnblogs.com/luo-c/p/12979976.html