Leetcodeインタビューの質問01.07。回転行列[追加のメモリ領域を消費しません]

問題の説明

各ピクセルのサイズが4バイトのN×Nマトリックスで表される画像を提供します。画像を90度回転するアルゴリズムを設計してください。

追加のメモリスペースを占有することなく実行できますか?

問題解決レポート

回転プロセスをシミュレートすると、位置(i、j)の要素が90度回転して(j、n-1-i)になり、位置(j、n-1-i)の要素が90度回転して(n -1-i、n-1-j)、位置(n-1-i、n-1-j)の要素を90度回転して(n-1-j、i)と最終位置(n-1- j、i)の要素は(i、j)に回転されます。[要素が360度回転し、元の位置に戻ることを意味します]

したがって、左上隅の1/4の行列サイズを列挙し、トラバースされた要素とそれに関連する4つの要素の交換位置を調べるだけで済みます。

実装コード

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n=matrix.size();
        for(int i=0;i<n/2;i++){
            for(int j=0;j<(n+1)/2;j++){
                int tmp=matrix[i][j];
                matrix[i][j]=matrix[n-1-j][i];
                matrix[n-1-j][i]=matrix[n-1-i][n-1-j];
                matrix[n-1-i][n-1-j]=matrix[j][n-1-i];
                matrix[j][n-1-i]=tmp;
            }
        }
    }
};

参考文献

[1] Leetcodeインタビューの質問01.07。回転行列
[2] [デイリーアルゴリズムDay93]追加スペースなしで行列を回転させますか?

MD_
139の元の記事を公開 賞賛8 10,000+ビュー

おすすめ

転載: blog.csdn.net/qq_27690765/article/details/105388797