力扣48.旋转图像

[复制链接]
发表于 2025-11-23 22:58:55 | 显示全部楼层 |阅读模式
一、前言

力扣48.旋转图像
这道题要求把给定矩阵旋转90度,而且不答应利用额外矩阵来完成旋转图像。
于是这道题只能利用原地旋转的方法来办理

二、原地旋转


对于一个N=3的矩阵来说,只必要两次循环就可以完成了

  • 将A1放到A3的位置,A3放到C3的位置,C3放到C1的位置,A1的位置放原C1的值
  • 将A2放到B3的位置,B3放到C2的位置,C2放到B1的位置,A2的位置放原B1的值
也就是必要循环N - 1次

而对于一个N=4的,会出现两个环,每个环必要举行必要举行3次循环。
今后可以得出规律,对于每一个N × N的矩阵来说,都会有N / 2个环必要原地旋转,每个环必要循环N - 1 - i次,此中i为第几个环,由于环越往内,环的循环次数就越少。
  1. int n = matrix.length;
  2. int k = n / 2;
  3. for (int i = 0; i < k; i++) {
  4.     for (int j = i; j < n - i - 1; j++) {
  5.                 // 交换
  6.     }
  7. }
复制代码
于是,本题的关键就是必要确定四个必要互换数值的坐标的表达式

  • 左上:(i, j)
  • 左下:(n - j -1, i),**n - j -1是由于在同一个环中,行是会厘革的,而列却不会厘革,永世是同一列,随着环的厘革,列才会厘革!**比如N=4,第一次左上为A1,左下为D1;第二次左上为A2,而左下为C1;因此可以看出行是会跟着j厘革的,而列是跟着i厘革的。
  • 右上:(j, n - i -1),行是跟着j厘革的,而列是跟着i厘革的,比如N=4,A1对应的是A4,A2对应的是B4,此中列随着环厘革而厘革,而行随着j厘革而厘革。
  • 右下:(n - i -1, n - j - 1),和前面分析差不多
推算出来四个必要互换的下标后,这道题就完成了百分之九十了
  1. public void rotate(int[][] matrix) {
  2.     int n = matrix.length;
  3.     int k = n / 2;
  4.     for (int i = 0; i < k; i++) {
  5.         for (int j = i; j < n - i - 1; j++) {
  6.             int t = matrix[i][j];
  7.             matrix[i][j] = matrix[n - j - 1][i];
  8.             matrix[n  - j - 1][i] = matrix[n  - i- 1][n - j - 1];
  9.             matrix[n  - i - 1][n -  j - 1] = matrix[j][n - i - 1];
  10.             matrix[j][n  - i - 1] = t;
  11.         }
  12.     }
  13. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

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

×
回复

使用道具 举报

登录后关闭弹窗

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