二维矩阵 matrix

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

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

思路:

我们可以先将 n x n 矩阵 matrix 按照左上到右下的对角线进行镜像对称

然后再对矩阵的每一行进行反转:       

发现结果就是 matrix 顺时针旋转 90 度的结果

java代码:

public void rotate(int[][] matrix) {

    int n = matrix.length;

    // 先沿对角线镜像对称二维矩阵

    for (int i = 0; i < n; i++) {

        for (int j = i; j < n; j++) {

            // 交换

            int temp = matrix[i][j];

            matrix[i][j] = matrix[j][i];

            matrix[j][i] = temp;

        }

    }

    // 然后反转二维矩阵的每一行

    for (int[] row : matrix) {

        reverse(row);

    }

}

// 反转一维数组

void reverse(int[] arr) {

    int i = 0, j = arr.length - 1;

    while (j > i) {

        // 交换

        int temp = arr[i];

        arr[i] = arr[j];

        arr[j] = temp;

        i++;

        j--;

    }

}

c代码:

void rotate(vector<vector<int>>& matrix) {

  int n = matrix.size();

  // 先沿对角线镜像对称二维矩阵

  for (int i = 0; i < n; i++) {

      for (int j = i; j < n; j++) {

          // 交换

          int temp = matrix[i][j];

          matrix[i][j] = matrix[j][i];

          matrix[j][i] = temp;

      }

  }

  // 然后反转二维矩阵的每一行

  for (vector<int>& row : matrix) {

      reverse(row.begin(), row.end());

  }

}

// 反转一维数组

void reverse(vector<int>& arr) {

  int i = 0, j = arr.size() - 1;

  while (j > i) {

      // 交换

      int temp = arr[i];

      arr[i] = arr[j];

      arr[j] = temp;

      i++;

      j--;

  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值