LeetCode 力扣 48. 旋轉圖像

題目描述(中等難度)

將一個矩陣順時針旋轉 90 度,而且不使用額外的空間。大概屬於找規律的題,沒有什麼通常的思路,觀察就能夠了。java

解法一

能夠先轉置,而後把每列對稱交換交換一下。segmentfault

public void rotate(int[][] matrix) {
    //以對角線爲軸交換
    for (int i = 0; i <  matrix.length; i++) {
        for (int j = 0; j <=i; j++) {
            if (i == j) {
                continue;
            }
            int temp = matrix[i][j];
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = temp;
        }
    } 
    //交換列
    for (int i = 0, j = matrix.length - 1; i < matrix.length / 2; i++, j--) {
        for (int k = 0; k < matrix.length; k++) {
            int temp = matrix[k][i];
            matrix[k][i] = matrix[k][j];
            matrix[k][j] = temp;
        }
    }

}

時間複雜度:O(n²)。spa

空間複雜度:O(1)。3d

也能夠先以橫向的中軸線爲軸,對稱的行進行交換,而後再以對角線交換。code

解法二

我把這個連接的思路貼過來,裏邊評論有張圖也都順道貼過來吧,寫的很好。blog

一圈一圈的循環交換,很妙!leetcode

public void rotate(int[][] matrix) {
    int n=matrix.length;
    for (int i=0; i<n/2; i++) 
        for (int j=i; j<n-i-1; j++) {
            int tmp=matrix[i][j];
            matrix[i][j]=matrix[n-j-1][i];
            matrix[n-j-1][i]=matrix[n-i-1][n-j-1];
            matrix[n-i-1][n-j-1]=matrix[j][n-i-1];
            matrix[j][n-i-1]=tmp;
        }
}

時間複雜度:O(n²)。get

空間複雜度:O(1)。it

這道題就是對題目的特徵進行觀察就能夠了。io

更多詳細通俗題解詳見 leetcode.wang
相關文章
相關標籤/搜索