https://leetcode-cn.com/problems/rotate-image/submissions/

  • 顺时针旋转90°,看每一圈就行了,因为外头的圈不会影响里面的
  • 写一个函数,先搞最外头的圈,搞完再搞里面的圈,直到没有圈

知道左上角点和右下角点就能确定一个圈
image.png

  • 先以4*4为具体例子过一下流程,等会再做抽象

image.png
for (i = 0; i < dc -tc; i++)

  • 第1位置 m[tr] [tr + i]
  • 第2个位置 m[tr + i] [ dc]
  • 第3个位置 m[dr] [dc - i]
  • 第4个位置 m[dr - i] [tc ]

把他们彼此交换位置即可

  1. public void rotate(int[][] matrix) {
  2. int tR = 0;
  3. int tC = 0;
  4. int dR = matrix.length - 1;
  5. int dC = matrix[0].length - 1;
  6. while (tR < dR) { // 因为是正方形,行错过了意味着列也错过了
  7. rotateEdge(matrix, tR++, tC++, dR++, dC++);
  8. }
  9. }
  10. public void rotateEdge(int[][] m, int tR, int tC, int dR, int dC) {
  11. int times = dC - tC;
  12. int tmp = 0;
  13. for (int i = 0; i < times; i++) {
  14. tmp = m[tR][tC + i];
  15. m[tR][tC + i] = m[dR - i][tC];
  16. m[dR - i][tC] = m[dR][dC - i];
  17. m[dR][dC - i] = m[tR + i][dC];
  18. m[tR + i][dC] = tmp;
  19. }
  20. }

类似题printStar

n = 10, 要求打印出这样的矩阵
image.png

image.png