48.旋转图像

旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

image

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

思路

  1. 先将矩阵转置。
  2. 再将每一行从两端开始交换。
//交换元素
private void swap(int[][] matrix, int row1, int col1, int row2, int col2){
    int temp = matrix[row1][col1];
    matrix[row1][col1] = matrix[row2][col2];
    matrix[row2][col2] = temp;
}

//旋转图像
public void rotate(int[][] matrix) {
    int m = matrix.length;
    //先转置矩阵
    for(int i = 0; i < m; i++){
        for(int j = 0; j < i; j++){
            swap(matrix,i,j,j,i); // 将矩阵(i, j)和(j, i)位置的元素交换
        }
    }
    //再将每一行从两端开始交换
    for(int i = 0; i < m; i++){ //控制行变换
        for(int j = 0; j < m / 2; j++){ //控制列变化
            swap(matrix, i, j, i, m-j-1); 
        }
    }
}

[!NOTE]

转置的时候,j 的变化是从 0 到 i,不是 0 到 m,如果是后者,就会出现换过去又换回来的结果。

posted @ 2024-12-17 19:00  Drunker•L  阅读(6)  评论(0编辑  收藏  举报