564. Cari Palindrom Terdekat
Kesukaran:Sukar
Topik:Matematik, Rentetan
Diberi rentetan n mewakili integer, kembalikan _integer terdekat (tidak termasuk dirinya), iaitu palindrom-. Kalau seri, pulangkanyang kecik.
Yang paling hampir ditakrifkan sebagai perbezaan mutlak yang diminimumkan antara dua integer.
Contoh 1:
- Input:n = "123"
- Output:"121"
Contoh 2:
- Input:n = "1"
- Output:"0"
- Penjelasan:0 dan 2 adalah palindrom yang paling hampir tetapi kami mengembalikan yang terkecil iaitu 0.
Kekangan:
- 1 <= n.panjang <= 18
- n hanya terdiri daripada digit.
- n tidak mempunyai sifar pendahuluan.
- n mewakili integer dalam julat [1, 1018- 1].
Petunjuk:
- Adakah brute force berfungsi untuk masalah ini? Fikirkan benda lain.
- Ambil beberapa contoh seperti 1234, 999,1000, dll dan semak palindrom terdekat mereka. Berapa banyak kes yang berbeza mungkin?
- Adakah kita perlu mengambil kira separuh kiri atau kanan separuh sahaja tali atau kedua-duanya?
- Cuba cari palindrom terdekat bagi nombor ini- 12932, 99800, 12120. Adakah anda memerhati sesuatu?
Penyelesaian:
Kami akan menumpukan pada mencipta fungsi yang menjana calon palindrom yang berpotensi dan kemudian memilih yang paling hampir dengan nombor input.
Pendekatan Penyelesaian:
Kenalpasti Calon Palindrom:
- Cermin separuh pertama nombor untuk membentuk palindrom.
- Pertimbangkan kes tepi seperti semua digit ialah 9, 100...001 atau 99...99.
- Jana palindrom dengan mengubah suai bahagian tengah nombor ke atas atau ke bawah sebanyak 1.
Kira Palindrom Terhampir:
- Bagi setiap calon palindrom, kira perbezaan mutlak dengan nombor asal.
- Kembalikan palindrom dengan perbezaan terkecil. Jika seri, pulangkan palindrom yang lebih kecil.
Mari kita laksanakan penyelesaian ini dalam PHP:564. Cari Palindrom Terdekat
Penjelasan:
- generatePalindrome($firstHalf, $isOddLength):
- Fungsi pembantu ini mencipta palindrom dengan mencerminkan separuh pertama nombor.
Salin selepas log masuk
Kes Tepi:
- Palindrom yang dijana daripada nombor seperti 100...001 atau 99...99 dikendalikan dengan memeriksa kes ini secara eksplisit.
Logik Utama:
- Kami mengira kemungkinan palindrom dan kemudian mencari yang paling hampir dengan membandingkan perbezaan mutlak.
Penyelesaian ini dengan cekap mengecilkan kemungkinan calon palindrom dan memilih yang paling hampir dengan hanya mempertimbangkan beberapa pilihan, menjadikannya lebih pantas daripada pendekatan kekerasan.
Hubungi Pautan
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberirepositoribintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna buat saya!
Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:
Atas ialah kandungan terperinci . Cari Palindrom Terdekat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!