Rumah >pembangunan bahagian belakang >tutorial php >Memusingkan Kotak
1861. Memusingkan Kotak
Kesukaran: Sederhana
Topik: Tatasusunan, Dua Penunjuk, Matriks
Anda diberi matriks m x n kotak aksara yang mewakili pandangan sisi kotak. Setiap sel kotak adalah salah satu daripada yang berikut:
Kotak itu dipusingkan 90 darjah mengikut arah jam, menyebabkan beberapa batu jatuh akibat graviti. Setiap batu jatuh ke bawah sehingga ia mendarat di atas halangan, batu lain, atau bahagian bawah kotak. Graviti tidak menjejaskan kedudukan halangan, dan inersia daripada putaran kotak tidak menjejaskan kedudukan mendatar batu.
Memang dijamin bahawa setiap batu di dalam kotak terletak pada halangan, batu lain atau bahagian bawah kotak.
Pulangan matriks n x m yang mewakili kotak selepas putaran yang diterangkan di atas.
Contoh 1:
Contoh 2:
Contoh 3:
Kekangan:
Petunjuk:
Penyelesaian:
Kita perlu mengikuti beberapa langkah yang berbeza:
Putar kotak: Kami mula-mula memutar matriks 90 darjah mengikut arah jam. Matriks yang diputar akan mempunyai n baris dan m lajur, dengan n ialah bilangan lajur dalam kotak asal dan m ialah bilangan baris.
Kesan graviti: Selepas berputar, kita perlu mensimulasikan kesan graviti. Ini bermakna semua batu ('#') harus "jatuh" ke bahagian bawah lajur baharunya, berhenti hanya apabila mereka menghadapi halangan ('*') atau batu lain ('#').
Putaran: Selepas putaran, elemen pada kedudukan [i][j] dalam matriks asal akan diletakkan pada kedudukan [j][m-1-i] dalam putaran matriks.
Simulasi graviti: Kita perlu memproses setiap lajur dari bawah ke atas. Jika ada batu ('#'), ia akan jatuh ke bawah sehingga mencapai halangan atau bahagian bawah. Jika sel itu kosong ('.'), ia boleh memuatkan batu.
Mari laksanakan penyelesaian ini dalam PHP: 1861. Memusingkan Kotak
<?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)); ?> <h3> Penjelasan: </h3> <ol> <li> <p><strong>Simulasikan Graviti</strong>:</p> <ul> <li>Lintas setiap baris dari kanan ke kiri. Gunakan penunjuk (Slot kosong) untuk menjejak di mana batu seterusnya akan jatuh.</li> <li>Jika batu (#) ditemui, alihkannya keSlot kosong, dan kemudian kurangkan Slot kosong.</li> <li>Jika halangan (*) ditemui, tetapkan semulaSlot kosong ke kedudukan sejurus sebelum halangan.</li> </ul> </li> <li> <p><strong>Putar Matriks</strong>:</p> <ul> <li>Buat matriks baharu di mana elemen di [i][j] dalam kotak diputar diambil daripada [m - 1 - j][i] kotak asal.</li> </ul> </li> </ol> <h3> Contoh Output </h3> <h4> Input: </h4> <pre class="brush:php;toolbar:false">$box = [ ["#", ".", "#"], ];
[ [".",], ["#",], ["#",], ]
$box = [ ["#", ".", "*", "."], ["#", "#", "*", "."], ];
[ ["#", "."], ["#", "#"], ["*", "*"], [".", "."], ]
Jumlah: O(m x n).
Penyelesaian ini cekap dan mematuhi kekangan masalah.
Pautan Kenalan
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!
Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:
Atas ialah kandungan terperinci Memusingkan Kotak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!