48. Rotate Image
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?
解法
/*
* clockwise rotate
* first reverse up to down, then swap the symmetry
* 1 2 3 7 8 9 7 4 1
* 4 5 6 => 4 5 6 => 8 5 2
* 7 8 9 1 2 3 9 6 3
*/
public class Solution {
public void rotate(int[][] matrix) {
if (matrix == null || matrix.length == 0) {
return;
}
if (matrix[0] == null || matrix[0].length == 0) {
return;
}
if (matrix.length != matrix[0].length) {
return;
}
int len = matrix.length;
reverse(matrix, 0, matrix.length - 1);
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
swap(matrix, i, j);
}
}
}
private void reverse(int[][] matrix, int left, int right) {
while (left < right) {
int[] temp = matrix[left];
matrix[left] = matrix[right];
matrix[right] = temp;
left++;
right--;
}
}
private void swap(int[][] matrix, int i, int j) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}