マトリックスをその場で簡単に回転する: 包括的なガイド

WBOY
リリース: 2024-07-24 17:47:29
オリジナル
1020 人が閲覧しました

Effortlessly Rotate a Matrix in Place: A Comprehensive Guide

行列を時計回りに 90 度回転することは、コンピューター サイエンスや技術面接でよくある問題です。新しい行列に追加のメモリを使用せずに、回転を適切な場所で実行することが目標であるため、この問題は特に興味深いものになる可能性があります。このガイドでは、これを実現する方法を、明確な説明とコード例で説明します。


問題の説明

画像を表す n x n 2D 行列 A が与えられます。あなたのタスクは、画像をその場で時計回りに 90 度回転することです。追加のアレイを使用する場合、部分的なクレジットのみを受け取ります。

問題の制約

1≤n≤1000

入力フォーマット

整数の 2D 行列 A

出力フォーマット

2D 回転行列

入力例

[
    [1, 2],
    [3, 4]
]
ログイン後にコピー

出力例

[
    [3, 1],
    [4, 2]
]
ログイン後にコピー

例の説明

行列を 90 度回転した後:

  • 1 は位置 2 に移動します
  • 2 は位置 4 に移動します
  • 4 は位置 3 に移動します
  • 3 が位置 1 に移動します

段階的な解決策

ステップ 1: マトリックスの転置

  • 行列の転置とは、行を列に、列を行に変換することを意味します。これは、主対角線 (左上から右下の対角線) を横切って要素を交換することで実行できます。

ステップ 2: 各行を反転する

  • 行列が転置されたら、次のステップは各行を反転することです。これにより、マトリックスが実質的に時計回りに 90 度回転します。

コード例

回転を実行する JavaScript 関数は次のとおりです。

function rotateMatrix(A) {
    const n = A.length;

    // Step 1: Transpose the matrix
    for (let i = 0; i < n; i++) {
        for (let j = i; j < n; j++) {
            let temp = A[i][j];
            A[i][j] = A[j][i];
            A[j][i] = temp;
        }
    }

    // Step 2: Reverse each row
    for (let i = 0; i < n; i++) {
        A[i].reverse();
    }

    return A;
}

// Example usage:
let matrix = [
    [1, 2],
    [3, 4]
];

console.log(rotateMatrix(matrix));
ログイン後にコピー

コードの説明

行列を転置します。

  • 2 つのネストされたループを使用して行列をループします。
  • 要素 A[i][j] と A[j][i] を交換して行列を転置します。

各行を反転する:

  • 組み込みの reverse() メソッドを使用して、転置行列の各行を反転します。

回転された行列を返します。

  • 各行を転置および反転した後、行列は時計回りに 90 度回転します。

結論

行列をその場で回転することは、配列操作とその場でのアルゴリズムの理解を示す貴重なスキルです。行列を転置してから各行を反転すると、余分なスペースを使用せずに目的の回転を実現できます。この方法を実践して、技術面接やコーディングの課題における問題解決能力を高めてください。

以上がマトリックスをその場で簡単に回転する: 包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!