题目:
原文链接:https://leetcode-cn.com/problems/rotate-image/
思路1(暴力法):
- 首先暴力法,遍历一次用一个中间矩阵保存旋转过后的元素位置,再遍历一次将中间矩阵的值赋给原矩阵
- 但是由于题目要求原地旋转,所以放弃,但是保留下思路代码
代码1:
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
int[][] newMatrix = new int[n][n];
for(int i = 0;i<n;i++){
for(int j=0;j<n;j++){
newMatrix[j][n-i-1] = matrix[i][j];
}
}
for(int i =0;i<n;i++){
for(int j=0;j<n;j++){
matrix[i][j] = newMatrix[i][j];
}
}
}
}
思路2(原地翻转):
- 先上下翻转,然后以左上-右下对角线翻转,就能达到顺时针旋转90度的效果,注意这题是n*n的矩阵
代码2:
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i=0;i<n/2;i++){
for(int j=0;j<n;j++){
swap(matrix,i,j,n-i-1,j);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
swap(matrix,i,j,j,i);
}
}
}
public void swap(int[][] matrix, int x,int y, int m,int n){
int temp = matrix[x][y];
matrix[x][y] = matrix[m][n];
matrix[m][n] = temp;
}
}