1. 核心思路(必背)
先上下翻转 → 再沿主对角线翻转(转置)两步搞定顺时针 90 度!
2. 沿对角线翻转 = 交换对称的两个点
规则只有一句:交换(i,j)和(j,i)
比如:
- (0,1) ↔ (1,0)
- (0,2) ↔ (2,0)
- (1,2) ↔ (2,1)
3. 为什么 j 从 i+1 开始?
因为:
- 上三角(对角线上面的元素):j > i
- 下三角(对角线下面的元素):j < i
如果遍历所有 i 和 j,会交换两次,又换回去!
所以只需要遍历上三角(j = i+1 开始)交换一次就够了!
完整代码实现:
class Solution { public void rotate(int[][] matrix) { int n = matrix.length; // 先进行上下垂直翻转 for(int i = 0;i<n/2;i++){ int[] temp = matrix[i]; matrix[i] = matrix[n - 1 -i]; matrix[n - 1 - i] = temp; } // 第二步:沿主对角线翻转(矩阵转置) // 只遍历上三角,交换 matrix[i][j] 和 matrix[j][i] for(int i = 0;i<n;i++){ for(int j = i+ 1;j<n;j++){ int temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } } }