Rumah hujung hadapan web tutorial js Meditasi LeetCode: Cara Menyahkod

Meditasi LeetCode: Cara Menyahkod

Jul 29, 2024 am 12:14 AM

LeetCode Meditations: Decode Ways

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

Input: s = "12"

 

Output: 2

 

Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).

Salin selepas log masuk

Atau:

1

2

3

4

5

Input: s = "226"

 

Output: 3

 

Explanation: "226" could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).

Salin selepas log masuk

Atau:

1

2

3

4

5

Input: s = "06"

 

Output: 0

 

Explanation: "06" cannot be mapped to "F" because of the leading zero ("6" is different from "06"). In this case, the string is not a valid encoding, so return 0.

Salin selepas log masuk

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

let dp = Array.from({ length: s.length + 1 }, () => 0);

 

dp[0] = 1;

 

 

 

 

<p>Sekali lagi, sama seperti masalah sebelumnya, kita perlu mengekalkan dua nilai terbawah, jadi kita perlu memulakan slot kedua tatasusunan kita yang sepadan dengan bilangan cara untuk menyahkod aksara pertama dalam rentetan.</p>

 

<p>Kami tahu bahawa kami tidak boleh menyahkodnya jika ia '0', jadi bilangan cara untuk menyahkodnya ialah 0 dalam kes ini.<br>

Ambil perhatian bahawa <em>tidak dapat menyahkod</em> adalah berbeza daripada <em>tidak melakukan sebarang penyahkodan sama sekali</em>: dalam kes pertama, bilangan cara untuk menyahkod ialah 0, tetapi dalam kes kedua (seperti baru sahaja kami lakukan dengan dp[0]), boleh dikatakan bahawa bilangan cara untuk menyahkod ialah 1.</p>

 

<p>Dalam semua kes lain, hanya ada <strong>satu</strong> cara untuk menyahkodnya kerana ia hanya satu aksara. Jadi, kami akan memulakan dp[1] dengan sewajarnya:<br>

</p>

 

<pre class="brush:php;toolbar:false">dp[1] = (s[0] === '0') ? 0 : 1;

Salin selepas log masuk

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

for (let i = 2; i <= s.length; i++) {

  const prevDigit = s[i - 1];

  const twoPrevDigits = s.slice(i - 2, i);

  if (+prevDigit !== 0) {

    dp[i] += dp[i - 1];

  }

 

  if (10 <= +twoPrevDigits && +twoPrevDigits <= 26) {

    dp[i] += dp[i - 2];

  }

}

Salin selepas log masuk
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

function numDecodings(s: string): number {

  /* ... */

 

  return dp[s.length];

}

Salin selepas log masuk

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

function numDecodings(s: string): number {

  let dp = Array.from({ length: s.length + 1 }, () => 0);

 

  dp[0] = 1;

  dp[1] = (s[0] === '0') ? 0 : 1;

 

  for (let i = 2; i <= s.length; i++) {

    const prevDigit = s[i - 1];

    const twoPrevDigits = s.slice(i - 2, i);

    if (+prevDigit !== 0) {

      dp[i] += dp[i - 1];

    }

 

    if (10 <= +twoPrevDigits && +twoPrevDigits <= 26) {

      dp[i] += dp[i - 2];

    }

  }

 

  return dp[s.length];

}

Salin selepas log masuk

Time and space complexity

Both the time and space complexity for this solution are O(n)O(n) 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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Ganti aksara rentetan dalam javascript Ganti aksara rentetan dalam javascript Mar 11, 2025 am 12:07 AM

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

periksa jQuery jika tarikh sah periksa jQuery jika tarikh sah Mar 01, 2025 am 08:51 AM

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

jQuery mendapatkan padding/margin elemen jQuery mendapatkan padding/margin elemen Mar 01, 2025 am 08:53 AM

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

10 Tab Accordion JQuery 10 Tab Accordion JQuery Mar 01, 2025 am 01:34 AM

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

10 patut diperiksa plugin jQuery 10 patut diperiksa plugin jQuery Mar 01, 2025 am 01:29 AM

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 Debugging dengan Node dan HTTP-Console HTTP Debugging dengan Node dan HTTP-Console Mar 01, 2025 am 01:37 AM

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 Persediaan API Carian Google Custom Tutorial Persediaan API Carian Google Custom Mar 04, 2025 am 01:06 AM

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

jQuery tambah bar scroll ke div jQuery tambah bar scroll ke div Mar 01, 2025 am 01:30 AM

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

See all articles