48. 旋转图像

180 阅读1分钟

思路

  • 先转置(以左上到右下的对角线为轴,对称操作), 左上到右下为轴,在交换时写坐标更方便
  • 再轴对称 (竖轴)
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        //转置
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {//注意这里循环变量的取值,取对角线之上的元素。
                int tmp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = tmp;
            }
        }
        //轴对称
        for (int i = 0; i < n; i++) {
            int l = 0;
            int r = n - 1;
            while (l <= r) {//双指针,n为奇数偶数时的情况均适用
                int tmp = matrix[i][l];
                matrix[i][l] = matrix[i][r];
                matrix[i][r] = tmp;
                l++;
                r--;
            }
        }
    }
}