题目:题目描述链接
解题:
方法1:原地交换(优)
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i = 0; i < n / 2; i++){
for(int j = i; j < n - 1 - i; j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[n-1-j][i];
matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
matrix[j][n-1-i] = temp;
}
}
}
}
方法2:暴力解法
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
int[][] matrix_new = new int[n][n];
//给新数组输入值
for(int i = 0; i < n; ++i){
for(int j = 0; j < n; ++j){
matrix_new[j][n-i-1] = matrix[i][j];
}
}
//输出复制给原数组
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
matrix[i][j] = matrix_new[i][j];
}
}
}
}
思路:
方法2:暴力解法
1.计算每个位置对应的原始位置
2.新建矩阵一一写入值
对于矩阵中第 ii 行的第 jj 个元素,在旋转后,它出现在倒数第 ii 列的第 jj 个位置。
方法1:原地交换(优)
1.寻找规律
2.按顺序进行旋转操作,避免覆盖原始值
原始:
逆旋转90°:
具体看看:
第一个:
旋转后:
第二个:
旋转后:
第三个:
旋转后:
matrix[i] [j]每次进行四个数的轮换,轮换次数是:
i = n / 2
j = n - 1- i
(n=matrix.length)
旋转后,[1,1]的4存在变量temp中,将[2,1]的值3写入[1,1],将[2,2]的值6写入[2,1],将[1,2]的值8写入[2,2]中,将变量temp的值4写入[1,2]中。