ホームページ  >  記事  >  バックエンド開発  >  。スパイラルマトリックスIII

。スパイラルマトリックスIII

王林
王林オリジナル
2024-08-09 09:18:51688ブラウズ

885。スパイラルマトリックスⅢ

トピック: 配列、行列、シミュレーション

東向きの行 x 列グリッドのセル (rStart、cStart) から開始します。北西の角はグリッドの最初の行と列にあり、南東の角は最後の行と列にあります。

時計回りの螺旋状に歩き、このグリッド内のすべての位置を訪問します。グリッドの境界の外に移動するたびに、グリッドの外を歩き続けます (ただし、後でグリッドの境界に戻る可能性があります)。最終的には、グリッドのすべての行 * 列スペースに到達します。

訪問した順序でグリッドの位置を表す座標の配列を返します。

例 1:

. Spiral Matrix III

  • 入力: 行 = 1、列 = 4、rStart = 0、cStart = 0
  • 出力: [[0,0],[0,1],[0,2],[0,3]]

例 2:

. Spiral Matrix III

  • 入力: 行 = 5、列 = 6、rStart = 1、cStart = 4
  • 出力: [[1,4],[1,5],[2,5],[2,4],[2,3],[1,3],[0,3] 、[0,4]、[0,5]、[3,5]、[3,4]、[3,3]、[3,2]、[2,2]、[1,2]、[ 0,2]、[4,5]、[4,4]、[4,3]、[4,2]、[4,1]、[3,1]、[2,1]、[1、 1],[0,1],[4,0],[3,0],[2,0],[1,0],[0,0]]

制約:

  • 1
  • 0 行
  • 0

    解決策:

    この問題を解決するには、次の手順に従います:
  1. 方向配列
  2. : 方向配列を使用すると、正しい順序 (東→南→西→北) での移動が容易になります。各方向では、行インデックスと列インデックスが対応して変更されます。
  3. 歩数管理
  4. : 各方向に進む歩数を制御する必要があります。最初は東に 1 歩、次に南に 1 歩、西に 2 歩、北に 2 歩というように移動します。
  5. 境界チェック
  6. : 移動するたびに、新しい位置がグリッドの境界内にあるかどうかを確認してください。存在する場合は、それを結果配列に追加します。
  7. 停止条件
  8. : すべての行 * 列の位置を訪問したら、ループを停止します。

このソリューションを PHP で実装してみましょう: 885。スパイラルマトリックスⅢ

<?php
// Example Usage:
print_r(spiralMatrixIII(1, 4, 0, 0)); // [[0,0],[0,1],[0,2],[0,3]]
print_r(spiralMatrixIII(5, 6, 1, 4)); // [[1,4],[1,5],[2,5],[2,4], ...]
?>

説明:
  1. 方向
  2. : 方向配列は、東、南、西、北に移動するための行と列の変化を保持します。
  3. 動き
  4. : (rStart, cStart) から開始し、らせんパターンの方向に従って動きます。
  5. 境界チェック
  6. : グリッド内にある場合のみ、結果に位置を追加します。
  7. 歩数制御
  8. : stepCount は、方向転換する前に現在の方向に何歩進むかを管理します。 2ターン後に増加します。
  9. 終了
  10. : グリッド内のすべての位置が訪問されるまでループが継続します。

このアプローチにより、グリッド内のすべてのセルを必要なスパイラル順序で確実に訪問できるようになります。

連絡先リンク

このシリーズが役立つと思われた場合は、GitHub で リポジトリ

にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!

このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
  • LinkedIn
  • GitHub

以上が。スパイラルマトリックスIIIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。