問題描述
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
For example:
Input: [[1, 2], [3, 4]]
Output: [[3, 1], [4, 2]];
思考:怎麼變換使用O(1)的空間
想法:先對矩陣進行對角線變換,然後對每一行,進行逆序變換
public class Solution {
public void rotate(int[][] matrix) {
diagSwap(matrix);
rowReverse(matrix);
}
private void diagSwap(int[][] matrix){
if (matrix.length < 2)
return;
for(int i = 0; i < matrix.length; i++)
for(int j = 0; j < i; j++)
swap(i, j, j, i, matrix);
}
private void swap(int oR, int oC, int Tr, int Tc, int[][] matrix){
int temp = matrix[oR][oC];
matrix[oR][oC] = matrix[Tr][Tc];
matrix[Tr][Tc] = temp;
}
private void rowReverse(int[][] matrix){
if(matrix.length == 0 )
return ;
int len = matrix[0].length;
for(int i = 0; i < matrix.length; i++)
for(int j = 0; j < (len >> 1); j++)
swap(i, j, i, len - j - 1, matrix);
}
}