Kami diberi nombor integer positif. Kita perlu mencari rentetan yang terdiri daripada huruf kecil supaya jumlah semua aksara dalam rentetan adalah sama dengan num, dan rentetan adalah yang terbesar dalam susunan leksikografi. Di sini, ‘a’ = 1, ‘b’ = 2, ‘c’ = 3, ‘d’ = 4, …., ‘z’ = 26.
Kita perlu menggunakan aksara "z" pada permulaan rentetan untuk mencipta rentetan kamus terbesar. Akhir sekali, kita perlu menggunakan aksara terakhir berdasarkan nilai num % 26.
num = 30
‘zd’
‘zd’ ialah rentetan leksikografik terbesar dengan jumlah aksara 30 (z = 26 + d = 4).
3
‘c’
‘c’ mewakili 3 dirinya.
130
‘zzzzz’
Jumlah nilai setiap aksara 'zzzzz' ialah 130.
Kaedah ini akan menggunakan gelung sementara untuk mencipta rentetan hasil. Kami akan berulang sehingga nombor mempunyai nilai yang lebih besar daripada atau sama dengan 26, pada setiap lelaran kami akan menambah 'z' pada rentetan dan menolak 26 daripada nombor itu. Akhir sekali, kami akan menambah aksara pada rentetan berdasarkan bakinya.
Langkah 1 - Jalankan fungsi findString() dengan menghantar nilai angka sebagai parameter.
Langkah 2 - Mulakan pembolehubah hasil jenis rentetan dengan rentetan kosong untuk menyimpan rentetan hasil.
Langkah 3 - Gunakan gelung sementara untuk lelaran sehingga nilai 'num' lebih besar daripada atau sama dengan 26.
Langkah 4 - Dalam gelung while, tambahkan aksara 'z' pada rentetan yang terhasil.
Langkah 5 - Tolak 26 daripada nilai nombor.
Langkah 6 - Apabila lelaran gelung while selesai, semak sama ada nilai num lebih besar daripada 0. Jika ya, tambahkan aksara terakhir pada rentetan berdasarkan nilai pembolehubah 'num'.
Langkah 7 - Kembalikan rentetan hasil.
#include <bits/stdc++.h> using namespace std; // function to find the resultant string string findString(int num) { // variable to store the resultant string string result = ""; // using a while loop to find the resultant string while (num >= 26) { // append z to the resultant string result += 'z'; // Decrease the number by 26 num -= 26; } // Convert the remaining number to char and append to the resultant string if(num != 0) { result += char(num + 'a' - 1); } return result; } int main() { int num = 96; cout << "The resultant string is " << findString(num); return 0; }
The resultant string is zzzr
Kerumitan masa - O(num), kerana gelung while berjalan num/26 kali, yang sama dengan O(num).
Kerumitan ruang - O(num), kerana rentetan boleh mengandungi paling banyak (bilangan/26 + 1) aksara.
Dalam kaedah ini, kita akan mencipta rentetan panjang N menggunakan pembina String(). Kami akan menggunakan operator modulo dan bahagian untuk mendapatkan jumlah bilangan z dalam rentetan.
Langkah 1 - Takrifkan pembolehubah "totalZ" dan mulakan dengan num/26.
Langkah 2 - Takrifkan pembolehubah 'rem' dan mulakan dengan 'num%26'.
Langkah 3 - Gunakan ini dengan menghantar 'totalZ' sebagai argumen pertama dan 'z' sebagai argumen kedua kepada string() constructor Mencipta rentetan yang mengandungi 'totalZ aksara ''z'. Pada masa yang sama, tambahkannya pada rentetan 'hasil'.
Langkah 4 - Jika nilai 'rem' tidak sama dengan 0, tambahkan aksara terakhir pada rentetan berdasarkan nilai pembolehubah 'rem'.
< /里>Langkah 5 - Kembalikan rentetan 'hasil'.
#include <bits/stdc++.h> using namespace std; // function to find the resultant string string findString(int num) { // variable to store the resultant string string result = ""; // variable to store the number of z's int totalZ = num / 26; // variable to store the remainder int rem = num % 26; // Using the string constructor to create a string with total number of totalZ 'z'. result += string(totalZ, 'z'); // If the remainder is non-zero, then add the corresponding character if(rem != 0) { result += char(rem + 'a' - 1); } return result; } int main(){ int num = 52; cout << "The resultant string is " << findString(num); return 0; }
The resultant string is zz
Kerumitan masa - O(num) Sebagai pembina rentetan, cipta rentetan yang mengandungi aksara totalz.
Kerumitan ruang - O(num)
Kami mempelajari dua cara untuk menukar nombor kepada rentetan. Kami telah menggunakan gelung while dalam kaedah pertama dan pembina string() dalam kaedah kedua. Walau bagaimanapun, kedua-dua kaedah mempunyai kerumitan ruang dan masa yang sama, tetapi kaedah kedua lebih mudah dibaca.
Atas ialah kandungan terperinci Rentetan terbesar dari segi leksikografi yang jumlah aksaranya sama dengan N. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!