題目地址:
https://www.lintcode.com/problem/rotate-image/description
給定一個二維矩陣,將其順時針翻轉。
可以先將其沿着這個從左上到右下的對角線做鏡面變換,然後再反轉每一行即可。代碼如下:
public class Solution {
/**
* @param matrix: a lists of integers
* @return: nothing
*/
public void rotate(int[][] matrix) {
// write your code here
for (int i = 0; i < matrix.length - 1; i++) {
for (int j = i + 1; j < matrix[i].length; j++) {
swap(matrix, i, j, j, i);
}
}
for (int[] row : matrix) {
flip(row);
}
}
private void flip(int[] A) {
for (int i = 0, j = A.length - 1; i < j; i++, j--) {
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
}
private void swap(int[][] A, int x1, int y1, int x2, int y2) {
int tmp = A[x1][y1];
A[x1][y1] = A[x2][y2];
A[x2][y2] = tmp;
}
}
時間複雜度,爲矩陣邊長。