矩阵-旋转图像

[复制链接]
发表于 2025-10-27 20:45:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
旋转图像
  1. 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
  2. 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
复制代码
输入:二维数组
输出:void
思绪:tempMatrix[j][n - i - 1] = matrix[j]
  1. class Solution {
  2.     public void rotate(int[][] matrix) {
  3.         //二维数组为n*n的方阵
  4.         int n = matrix.length;
  5.         // 使用辅助数组
  6.         int[][] tempMatrix = new int[n][n];
  7.         for(int i = 0; i < n; i++){
  8.             for(int j = 0; j < n; j++){
  9.                 tempMatrix[j][n - i - 1] = matrix[i][j];
  10.             }
  11.         }
  12.         for(int i = 0; i < n; i++){
  13.             for(int j = 0; j < n; j++){
  14.                 matrix[i][j] = tempMatrix[i][j];
  15.             }
  16.         }
  17.     }
  18. }
复制代码
但是原题分析不能使用别的一个数组来旋转图像,以是使用新方法
  1. class Solution {
  2.     public void rotate(int[][] matrix) {
  3.         //二维数组为n*n的方阵
  4.         int n = matrix.length;
  5.         //保证不重复不遗漏
  6.         for(int i = 0; i < n / 2; i++){
  7.             //j
  8.             for(int j = 0; j < (n + 1) / 2; j++){
  9.                 int temp = matrix[i][j];
  10.                 matrix[i][j] = matrix[n - j - 1][i];
  11.                 matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
  12.                 matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
  13.                 matrix[j][n - i -1] = temp;
  14.             }
  15.         }
  16.     }
  17. }
复制代码

图中四个位置的值更换,可以使用temp变量暂时存储,使用两数互换的方法举行四个数互换
关键在于为了使互换不重复和不遗漏,留意代码中i和j的上限值



二刷使用新方法:
用翻转取代旋转

  1. class Solution {
  2.     public void rotate(int[][] matrix) {
  3.         int n = matrix.length;
  4.         for(int i = 0; i < n / 2; i++){
  5.             for(int j = 0; j < n; j++){
  6.                 //上下水平翻转
  7.                 int temp = matrix[i][j];
  8.                 matrix[i][j] = matrix[n - i - 1][j];
  9.                 matrix[n - i - 1][j] = temp;
  10.             }
  11.         }
  12.         for(int i = 0; i < n; i++){
  13.             for(int j  =0; j < i; j++){
  14.                 //主对角线翻转
  15.                 int temp = matrix[i][j];
  16.                 matrix[i][j] = matrix[j][i];
  17.                 matrix[j][i] = temp;
  18.             }
  19.         }
  20.     }
  21. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表