48.画像回転バックルLeetCode力

タイトル説明(中難易度)

マトリックスは、時計回りに90度回転し、余分なスペースを使用しません。おそらくそれを観察する、という一般的なアイデアはありません、質問の法則を見つけるために属しています。

Aソリューション

最初の交換を切り替えるについて、各列の対称そして、移調することができます。

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²)。

複雑スペース:O(1)。

あなたは、まず対角線に切り替え、回線交換の対称軸に対して横方向に軸線することができます。

ソリューション2

私は、この置くリンクをアイデアは内部のコメントはまた、グラフがよく、ライトの上に掲示する機会を取る、オーバー掲載しました。

ループ交換の周りのサークルは、それは素晴らしいです!

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²)。

複雑スペース:O(1)。

全体的な

この質問はそれに観測された機能の対象です。

人気のより詳細な説明についてはleetcode.wang

公開された61元の記事 ウォン称賛7 ビュー20000 +

おすすめ

転載: blog.csdn.net/wind_liang/article/details/104074103