Meditasi LeetCode: Cara Menyahkod
Mari kita mulakan dengan penerangan untuk masalah ini:
Anda telah memintas mesej rahsia yang dikodkan sebagai rentetan nombor. Mesej itu dikodkan melalui pemetaan berikut:
"1" -> 'A' "2" -> 'B' ... "25" -> 'Y' "26" -> 'Z'
Walau bagaimanapun, semasa menyahkod mesej, anda menyedari bahawa terdapat banyak cara berbeza anda boleh menyahkod mesej kerana beberapa kod terkandung dalam kod lain ("2" dan "5" lwn "25").
Sebagai contoh, "11106" boleh dinyahkodkan kepada:
- "AAJF" dengan kumpulan (1, 1, 10, 6)
- "KJF" dengan kumpulan (11, 10, 6)
- Penghimpunan (1, 11, 06) tidak sah kerana "06" bukan kod yang sah (hanya "6" sah).
Nota: mungkin terdapat rentetan yang mustahil untuk dinyahkod.
Memandangkan rentetan s yang mengandungi hanya digit, kembalikan bilangan cara kepada nyahkodnya. Jika keseluruhan rentetan tidak boleh dinyahkodkan dengan cara yang sah, kembalikan 0.
Kes ujian dijana supaya jawapannya muat dalam 32-bit integer.
Contohnya:
1 2 3 4 5 |
|
Atau:
1 2 3 4 5 |
|
Atau:
1 2 3 4 5 |
|
Kekangannya ialah:
- 1 <= s.panjang <= 100
- s mengandungi hanya digit dan mungkin mengandungi sifar pendahuluan.
Saya rasa ini adalah salah satu masalah yang anda fikir tidak begitu sukar pada pandangan pertama sehingga anda cuba menyelesaikannya.
Pertama, mari kita mulakan dengan cerapan yang paling mudah: aksara boleh dinyahkodkan sama ada dirinya (sebagai satu aksara sahaja) atau bahagian nombor dua digit.
Jika itu pilihan pertama, kita hanya boleh mempunyai digit dari 1 hingga 9, kerana 0 dengan sendirinya tidak dipetakan kepada apa-apa.
Walau bagaimanapun, nombor dua digit boleh dari 10 hingga 26.
Seperti masalah sebelumnya dalam bab ini, kita boleh mulakan dengan mencipta tatasusunan dp untuk menyimpan bilangan cara untuk menyahkod sehingga setiap aksara semasa kita mengulangi melalui rentetan.
Sangat serupa dengan Memanjat Tangga, kita perlu memulakan tatasusunan kita dengan panjang s.length + 1 kerana kita perlu mempertimbangkan hakikat bahawa kita belum menyahkod apa-apa lagi.
Dalam erti kata lain, apabila tiada aksara, hanya ada satu cara untuk "menyahkod": tidak menyahkod sama sekali.
Jadi, kita boleh memulakan semua nilai sebagai 0s, kecuali untuk indeks pertama yang akan menjadi 1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Kini kita boleh mula mengulangi daripada indeks ketiga. Kami akan melihat kedua-dua digit sebelumnya dan dua digit sebelumnya pada masa yang sama.
Selagi digit sebelumnya bukan nombor 0, kami boleh menambah apa sahaja yang ada dalam slot tatasusunan kami sebelumnya.
Dan, selagi dua digit sebelumnya membentuk nombor antara 10 dan 26, kita boleh menambah penyelesaian yang sepadan itu juga. Secara keseluruhannya, ia boleh kelihatan seperti ini:
1 2 3 4 5 6 7 8 9 10 11 |
|
Note |
---|
We're converting the string characters to numbers with the handy unary plus operator. We know from the problem constraints that the string s only contains digits. |
At this point, we have the result in the last index (which corresponds to s.length) so we can just return it:
1 2 3 4 5 |
|
Overall, this is how our solution looks like:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Time and space complexity
Both the time and space complexity for this solution are O(n) as we iterate through all the characters doing a constant operation, and we have to keep an array whose size will grow as our input size increases.
Next up is the problem called Coin Change. Until then, happy coding.
Atas ialah kandungan terperinci Meditasi LeetCode: Cara Menyahkod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Penjelasan terperinci mengenai kaedah penggantian rentetan javascript dan Soalan Lazim Artikel ini akan meneroka dua cara untuk menggantikan watak rentetan dalam JavaScript: Kod JavaScript dalaman dan HTML dalaman untuk laman web. Ganti rentetan di dalam kod JavaScript Cara yang paling langsung ialah menggunakan kaedah pengganti (): str = str.replace ("cari", "ganti"); Kaedah ini hanya menggantikan perlawanan pertama. Untuk menggantikan semua perlawanan, gunakan ungkapan biasa dan tambahkan bendera global g: str = str.replace (/fi

Fungsi JavaScript mudah digunakan untuk memeriksa sama ada tarikh sah. fungsi isvaliddate (s) { var bits = s.split ('/'); var d = tarikh baru (bit [2] '/' bits [1] '/' bits [0]); kembali !! (d && (d.getmonth () 1) == bit [1] && d.getdate () == nombor (bit [0])); } // ujian var

Artikel ini membincangkan cara menggunakan jQuery untuk mendapatkan dan menetapkan margin dalaman dan nilai margin elemen DOM, terutama lokasi tertentu margin luar dan margin dalaman elemen. Walaupun ada kemungkinan untuk menetapkan margin dalaman dan luar elemen menggunakan CSS, nilai yang tepat boleh menjadi rumit. // Sediakan $ ("div.header"). css ("margin", "10px"); $ ("div.header"). css ("padding", "10px"); Anda mungkin menganggap kod ini

Artikel ini meneroka sepuluh tab jQuery yang luar biasa dan akordion. Perbezaan utama antara tab dan akordion terletak pada bagaimana panel kandungan mereka dipaparkan dan tersembunyi. Mari kita menyelidiki sepuluh contoh ini. Artikel Berkaitan: 10 JQuery Tab Plugin

Temui sepuluh plugin jQuery yang luar biasa untuk meningkatkan dinamisme dan daya tarikan visual laman web anda! Koleksi ini menawarkan pelbagai fungsi, dari animasi imej ke galeri interaktif. Mari kita meneroka alat yang berkuasa ini: Posting Berkaitan: 1

HTTP-CONSOLE adalah modul nod yang memberi anda antara muka baris arahan untuk melaksanakan arahan HTTP. Ia bagus untuk menyahpepijat dan melihat apa yang sedang berlaku dengan permintaan HTTP anda, tanpa mengira sama ada mereka dibuat terhadap pelayan web, Serv Web

Tutorial ini menunjukkan kepada anda bagaimana untuk mengintegrasikan API carian Google tersuai ke dalam blog atau laman web anda, menawarkan pengalaman carian yang lebih halus daripada fungsi carian tema WordPress standard. Ia menghairankan mudah! Anda akan dapat menyekat carian ke y

Coretan kod jQuery berikut boleh digunakan untuk menambah bar skrol apabila kandungan div melebihi kawasan elemen kontena. (Tiada demonstrasi, sila salin terus ke Firebug) // d = dokumen // w = tetingkap // $ = jQuery var contentArea = $ (ini), Wintop = contentArea.scrollTop (), docheight = $ (d) .height (), winheight = $ (w) .height (), Divheight = $ ('#c
