1861年。ボックスを回転させる
難易度: 中
トピック: 配列、2 ポインター、行列
ボックスの側面図を表す文字ボックスの m x n 行列が与えられます。ボックスの各セルは次のいずれかです:
箱は 時計回りに 90 度回転し、重力により石の一部が落下します。各石は、障害物、別の石、または箱の底に着地するまで落ちます。重力は障害物の位置に影響しません、ボックスの回転による慣性も石の水平位置に影響しません。
箱の中の各石が障害物、別の石、または箱の底に置かれていることが保証されています。
上記の回転後のボックスを表す n x m 行列を返します。
例 1:
例 2:
例 3:
制約:
ヒント:
解決策:
いくつかの異なる手順に従う必要があります:
ボックスを回転します: まず、行列を時計回りに 90 度回転します。回転された行列は n 行 m 列になります。n は元のボックスの列数、m は行数です。
重力効果: 回転後、重力の効果をシミュレートする必要があります。これは、すべての石 ('#') が新しい列の一番下に「落ち」、障害物 ('*') または別の石 ('#') に遭遇した場合にのみ停止することを意味します。
Rotation: 回転後、元の行列の位置 [i][j] にある要素は、回転された行列の位置 [j][m-1-i] に配置されます。マトリックス。
重力シミュレーション: 各列を下から上に処理する必要があります。石 ('#') がある場合、障害物または底に到達するまで落下します。セルが空 ('.') の場合、石を入れることができます。
このソリューションを PHP で実装してみましょう: 1861。ボックスを回転させる
<?php function rotateTheBox($box) { ... ... ... /** * go to ./solution.php */ } // Example Usage $box = [ ["#", ".", "#"], ]; print_r(rotateTheBox($box)); $box = [ ["#", ".", "*", "."], ["#", "#", "*", "."], ]; print_r(rotateTheBox($box)); $box = [ ["#", "#", "*", ".", "*", "."], ["#", "#", "#", "*", ".", "."], ["#", "#", "#", ".", "#", "."], ]; print_r(rotateTheBox($box)); ?>
重力をシミュレート:
行列を回転します:
$box = [ ["#", ".", "#"], ];
[ [".",], ["#",], ["#",], ]
$box = [ ["#", ".", "*", "."], ["#", "#", "*", "."], ];
[ ["#", "."], ["#", "#"], ["*", "*"], [".", "."], ]
合計: O(m x n).
このソリューションは効率的で、問題の制約を遵守しています。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がボックスを回転させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。