cci-Q1.6 矩形90度旋转

该博客探讨如何原地旋转一个NxN的矩阵90度,要求不使用额外的存储空间。内容涉及到图像处理中的矩阵旋转技巧,通过从外到内的层叠旋转实现旋转操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:

Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees. Can you do this in place?

译文:

一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)

N*N矩形,旋转90度,直观来看就是最外圈进行旋转,一层一层往里再进行旋转。


 public static int[][] rotate(int[][] matrix, int n) {
        for (int layer = 0; layer < n / 2; layer++) {
            int first = layer;
            int last = n - first - 1;
            for (int i = first; i < last; i++) {
                int offset = i - first;
                //Save top
                int top = matrix[first][i];
                // left->top
                matrix[first][i] = matrix[last - offset][first];
                //bottom->left
                matrix[last - offset][first] = matrix[last][last - offset];
                //right->bottom
                matrix[last][last - offset] = matrix[i][last];
                //top->right
                matrix[i][last] = top;
            }
        }
        return matrix;
    }

junit testcase

    @Test
    public void testRotate() {
        System.out.println("rotate");
        int[][] test = {{1, 2}, {3, 4}};
        int[][] expected = {{3, 1}, {4, 2}};
        assertArrayEquals(expected, q1_6.rotate(test, 2));
        int[][] test1 = {{1}};
        int[][] expected1 = {{1}};
        assertArrayEquals(expected1, q1_6.rotate(test1, 1));
        int[][] test2 = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
        int[][] expected2 = {{13, 9, 5, 1}, {14, 10, 6, 2}, {15, 11, 7, 3}, {16, 12, 8, 4}};
        assertArrayEquals(expected2, q1_6.rotate(test2, 4));
        int[][] test3 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int[][] expected3 = {{7, 4, 1}, {8, 5, 2}, {9, 6, 3}};
        assertArrayEquals(expected3, q1_6.rotate(test3, 3));
    }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值