20、矩阵-旋转图像

 

解题方法


这个问题是关于如何将一个矩阵顺时针旋转90度。为了解决这个问题,我们可以采用以下步骤:

转置矩阵:首先,我们需要对矩阵进行转置。转置意味着将矩阵的行变成列,列变成行。对于矩阵中的每个元素matrix[i][j],在转置后它会移动到位置matrix[j][i]。

翻转每一行:转置矩阵后,我们需要将每一行的元素翻转,即第一个元素和最后一个元素交换位置,这样对于每一行都进行操作,直至中间的元素。

以题目中的例子来说:

原始矩阵:

1 2 3
4 5 6
7 8 9
转置后的矩阵:

1 4 7
2 5 8
3 6 9
每行翻转后的矩阵:

7 4 1
8 5 2
9 6 3
这就是顺时针旋转90度后的矩阵。

代码如下:

class Solution {
    public static void rotate(int[][] matrix) {
        // 矩阵转置
        transpose(matrix);
        // 翻转每一行
        reverseRows(matrix);
    }

    private static void transpose(int[][] matrix) {
        int n = matrix.length;
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                // 交换元素 matrix[i][j] 和 matrix[j][i]
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
    }

    private static void reverseRows(int[][] matrix) {
        int n = matrix.length;
        for (int i = 0; i < n; i++) {
            int start = 0;
            int end = n - 1;
            while (start < end) {
                // 交换行的首尾元素
                int temp = matrix[i][start];
                matrix[i][start] = matrix[i][end];
                matrix[i][end] = temp;
                start++;
                end--;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值