leetCode 旋转图像

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

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

示例 1:

 

示例 2:

提示:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 20
  • -1000 <= matrix[i][j] <= 1000

这道题乍一看是没啥思路的,想了半天发现可以找一下旋转前后行列之间的关系,因为是旋转90度,所以旋转前的行会变成列,列会变成行,既然有了这个思路我们找规律就会更快,最后可以得出,旋转前的i行会变成旋转后的n-1-i列(n是行数),而旋转前的i列会变成旋转后的i行,这样子就明显了,接下来我们只需要创建一个中间矩阵来作为中间量给原数组赋值即可完成。代码如下:

class Solution {
    public void rotate(int[][] matrix) {
        int [][]a=new int[matrix.length][matrix[0].length];
        // 将数组 matrix 的所有值复制到数组 a
       for (int i = 0; i < matrix.length; i++) {
            System.arraycopy(matrix[i], 0, a[i], 0, matrix[i].length);
        }
        int n=matrix.length;
         for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                matrix[j][n - 1 - i] = a[i][j];
            }
        }
    }
    /**
    System.arraycopy(src, srcPos, dest, destPos, length);
    src: 源数组。这个是你要复制数据的数组。
    srcPos: 源数组的起始位置。这个是你要开始复制的源数组的索引位置。
    dest: 目标数组。这个是你要将数据复制到的数组。
    destPos: 目标数组的起始位置。这个是你要开始存放数据的目标数组的索引位置。
    length: 复制的长度。这个是要从源数组复制到目标数组的元素数量。
 */

}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值