https://leetcode.com/problems/rotate-image/#/description
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
解题思路:
1.方法一:可以重新开辟一个n*n的空间,然后进行对应元素交换
2.方法二:先交换matrix[i][j]和matrix[j][i],再进行左右对称交换。如下图所示
Java Code:
package go.jacob.day625;
public class Demo2 {
/*
* 交换matrix[i][j]和matrix[j][i]
* Runtime: 2 ms
*/
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
int temp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
}
/*
* 左右翻转
*/
for (int i = 0; i < n; i++) {
for (int j = 0; j < n/2; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[i][n-1-j];
matrix[i][n-1-j] = temp;
}
}
}
/*
* 不推荐的解法 Time:O(n^2) Space:O(n^2) Runtime: 2 ms. Your runtime beats 66.24 %
* of java submissions
*/
public void rotate_1(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 - 1 - i] = matrix[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
matrix[i][j] = newMatrix[i][j];
}
}
}