1945. Jumlah Digit Rentetan Selepas Tukar
Kesukaran: Mudah
Topik: Rentetan, Simulasi
Anda diberi rentetan s yang terdiri daripada huruf kecil Inggeris dan integer k.
Pertama, tukar s kepada integer dengan menggantikan setiap huruf dengan kedudukannya dalam abjad (iaitu, ganti 'a' dengan 1, 'b' dengan 2, ..., 'z' dengan 26). Kemudian, ubah integer dengan menggantikannya dengan jumlah digitnya. Ulang operasi transformasi k kali secara keseluruhan.
Sebagai contoh, jika s = "zbax" dan k = 2, maka integer yang terhasil ialah 8 dengan operasi berikut:
-
Tukar: "zbax" ➝ "(26)(2)(1)(24)" ➝ "262124" ➝ 262124
-
Transformasi #1: 262124 ➝ 2 + 6 + 2 + 1 + 2 + 4 ➝ 17
-
Transformasi #2: 17 ➝ 1 + 7 ➝ 8
Kembalikan integer yang terhasil selepas melakukan operasi yang diterangkan di atas.
Contoh 1:
-
Input: s = "iiii", k = 1
-
Output: 36
-
Penjelasan: Operasi adalah seperti berikut:
- Tukar: "iiii" ➝ "(9)(9)(9)(9)" ➝ "9999" ➝ 9999
- Transformasi #1: 9999 ➝ 9 + 9 + 9 + 9 ➝ 36
- Oleh itu integer yang terhasil ialah 36.
Contoh 2:
-
Input: s = "leetcode", k = 2
-
Output: 6
-
Penjelasan: Operasi adalah seperti berikut:
- Tukar: "leetcode" ➝ "(12)(5)(5)(20)(3)(15)(4)(5)" ➝ "12552031545" ➝ 12552031545
- Transformasi #1: 12552031545 ➝ 1 + 2 + 5 + 5 + 2 + 0 + 3 + 1 + 5 + 4 + 5 ➝ 33
- Transformasi #2: 33 ➝ 3 + 3 ➝ 6
- Oleh itu integer yang terhasil ialah 6.
Contoh 3:
-
Input: s = "zbax", k = 2
-
Output: 8
Kekangan:
- 1 <= s.panjang <= 100
- 1 <= k <= 10
-
s terdiri daripada huruf kecil Inggeris.
Petunjuk:
- Pertama, mari kita ambil perhatian bahawa selepas transformasi pertama nilainya akan menjadi paling banyak 100 * 10 yang tidak banyak
- Selepas Transformasi pertama, kita hanya boleh melakukan transformasi yang lain dengan kekerasan
Penyelesaian:
Kita boleh memecahkan penyelesaian kepada dua langkah utama:
-
Tukar rentetan s kepada integer:
- Setiap aksara dalam rentetan digantikan dengan kedudukannya yang sepadan dalam abjad (cth., 'a' -> 1, 'b' -> 2, ..., 'z' -> 26).
- Sambungkan semua nombor ini untuk membentuk integer yang besar.
-
Ubah integer dengan menjumlahkan digitnya k kali:
- Untuk setiap penjelmaan, jumlahkan semua digit nombor semasa.
- Ulang proses transformasi ini sebanyak k kali.
Mari laksanakan penyelesaian ini dalam PHP: 1945. Jumlah Digit Rentetan Selepas Tukar
<?php
function getLucky($s, $k) {
...
...
...
/**
* go to ./solution.php
*/
}
// Test cases
echo getLucky("iiii", 1) . "\n"; // Output: 36
echo getLucky("leetcode", 2) . "\n"; // Output: 6
echo getLucky("zbax", 2) . "\n"; // Output: 8
?>
Salin selepas log masuk
Penjelasan:
-
Tukar Rentetan:
- Kami melingkari setiap aksara dalam rentetan s dan mengira kedudukan abjadnya yang sepadan menggunakan ord($s[$i]) - ord('a') + 1.
- Nilai ini digabungkan untuk membentuk numStr rentetan besar yang mewakili nombor.
-
Ubah Nombor:
- Kami gelung k kali, setiap kali menjumlahkan digit numStr semasa.
- Hasil operasi penjumlahan ini disimpan semula dalam numStr sebagai rentetan untuk membolehkan transformasi selanjutnya.
- Selepas transformasi k, kami mengembalikan nilai integer akhir.
Kes Ujian:
-
"iiii" dengan k = 1 bertukar kepada "9999", dijumlahkan kepada 36, dan kerana k=1, keputusan akhir ialah 36.
-
"leetcode" dengan k = 2 ditukar kepada "12552031545", dijumlahkan kepada 33 dalam transformasi pertama dan kepada 6 dalam transformasi kedua, menghasilkan 6.
-
"zbax" dengan k = 2 bertukar kepada "262124", menjumlahkan kepada 17 dalam penjelmaan pertama dan kepada 8 dalam penjelmaan kedua, menghasilkan 8.
Penyelesaian ini cekap memandangkan kekangan dan akan berfungsi dengan baik dalam had yang disediakan.
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 Jumlah Digit Rentetan Selepas Tukar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!