题目:

解答:
运行结果 :

解答思路:
一、读题
原地!不能创建新二维数组,只能交换元素。
二、找旋转坐标公式
对于 n 阶方阵:原位置 (i, j),顺时针旋转 90° 之后,新位置是 (j, n-1-i)
比如 n=3:原 (0,0)=1 → 转到 (0,2) 原 (0,2)=3 → 转到 (2,2) 原 (2,2)=9 → 转到 (2,0)
原 (2,0)=7 → 转到 (0,0)
这四个点是一组循环交换!直接赋值会覆盖值,所以不能直接写 matrixnew_inew_j = matrixij,值会丢。
三、想原地旋转经典做法(两种常用)
方案 A:先转置,再每一行反转(这个代码最简单,推荐)
方案 B:分层,一圈一圈,每组 4 个点循环交换
我们先分析方案 A,好理解:
转置:行变列,matrixij <-> matrixji
再把每一行左右翻转
第一步:转置(行和列互换) 第二步:每一行反转
四、确定循环范围
1、转置的时候:只遍历上三角(i < j),不然交换两次等于没换
i 从 0 到 n-1
j 从 i+1 到 n-1
swap (matrix ij, matrix ji)
2、每行反转:对每一行列表,直接 reverse ()
5、写代码进去
matrixSize 就是 n(方阵行数 = 列数)
matrixColSize i 第 i 行的列数,这里全等于 n