【Lintcode】161. Rotate Image

題目地址:

https://www.lintcode.com/problem/rotate-image/description

給定一個二維矩陣,將其順時針翻轉90°90\degree

可以先將其沿着x=yx=y這個從左上到右下的對角線做鏡面變換,然後再反轉每一行即可。代碼如下:

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;
    }
}

時間複雜度O(n2)O(n^2)nn爲矩陣邊長。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章