力扣48-旋转图像
一、原题题目
1.1 题目
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
1.2 示例
示例1:
none给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ]
示例2:
none给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], 原地旋转输入矩阵,使其变为: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-image
二、解题思路
2.1 题目意思理解
这个题因为以前见过知道怎么做所以很快就回忆起了正常的思路是对矩阵进行两次翻转就能达到顺时针旋转90°的目的:①水平翻转,②沿次对角线翻转。下面以一个简单的数组演示主次对角线的区别,其实谁先谁后也会有所影响的。自己可以动手画画探究探究。

不同翻转顺序
2.2 详细代码(Java)
java
public class Solution {
public void rotate(int[][] matrix) {
int r = matrix.length;
for (int k = 0;k<r;k++){ // 实现水平翻转
for (int i = 0,j = r-1;i<j;i++,j--){
int temp = matrix[k][i];
matrix[k][i] = matrix[k][j];
matrix[k][j] = temp;
}
}
for (int i = 0;i<r-1;i++){ // 实现沿次对角线的翻转
for (int j = 0;j<r-1-i;j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[r-1-j][r-1-i];
matrix[r-1-j][r-1-i] = temp;
}
}
}
}
- 代码第14行要找好翻转每个位置对应的坐标变换是怎么变的。当(row1,col1)、(row2,col2)这两个位置关于次对角线对称的时候,我发现是row1 + col2 = 行数-1;col1 + row2 = 行数-1;可以简单理解为新的行标font和旧的列标 “互余”,新的列标与旧的行标 “互余”
2.3 算法执行结果

算法执行结果
三、总结分析
这道题像是一道技巧题,有些题目如果有特定的技巧,特定的规律,往往都会比正常解放快很多。