Rumah > Artikel > pembangunan bahagian belakang > Cari nombor terkecil yang terbentuk dengan memasukkan nombor yang diberi
Memasukkan nombor ke dalam nombor yang diberikan bermakna menambah nombor baharu pada nombor yang diberikan, sama ada sebelum, selepas atau di tengah nombor. Kami telah diberi nombor dan nombor dan mesti menambah nombor itu pada nombor itu dengan cara yang sekecil mungkin. Untuk memudahkan operasi sisipan, kami akan menukar nombor itu kepada rentetan. Tambahan pula, nombor yang diberikan juga boleh negatif, jadi kita perlu mengambil kira kes ini.
Given number: 124 Given digit: 3 Output: 1234
Penjelasan − Kami mempunyai empat tempat di mana kami boleh menambah nombor yang diberikan dan hasilnya boleh menjadi 3124, 1324, 1234, 1243. Daripada empat, yang terakhir adalah yang terkecil.
Terjemahan bahasa Cina bagiGiven number: -124 Given digit: 3 Output: -3124
Penjelasan − Kami mempunyai empat tempat di mana kami boleh menambah nombor yang diberikan dan hasilnya boleh menjadi -3124, -1324, -1234, -1243. Daripada empat, yang pertama adalah yang paling kecil.
Terjemahan bahasa Cina bagiSekarang kita telah melihat contoh, mari kita lihat langkah-langkah yang akan kita lakukan untuk menyelesaikan masalah -
Pertama, kami akan semak sama ada nombor semasa adalah positif atau negatif.
Jika nombor semasa adalah negatif, kami akan menandakannya sebagai pembolehubah negatif dan menjadikan nombor semasa positif.
Selepas itu, kami akan menukar nombor semasa kepada rentetan dan memanggil asas fungsi berdasarkan sama ada nombor semasa adalah positif atau negatif.
Dalam fungsi ini, kami akan cuba menyesuaikan nombor pada setiap kedudukan dan menyemak sama ada nombor semasa lebih kecil atau lebih besar berdasarkan nombor positif atau negatif.
Jika nombor semasa adalah positif, kami akan cuba mencari nombor terkecil dan mengembalikannya.
Jika tidak, kita mencari nombor terbesar dan mengembalikannya dengan mendarab dengan -1.
#include <bits/stdc++.h> using namespace std; int findMin(string str, int d){ string ans = str + to_string(d); // variable to store the answer // traversing over the string for(int i=0; i<= str.size(); i++){ ans = min(ans, str.substr(0,i) + to_string(d) + str.substr(i)); } return stoi(ans); } int findMax(string str, int d){ string ans = str + to_string(d); // variable to store the answer // traversing over the string for(int i=0; i<= str.size(); i++){ ans = max(ans, str.substr(0,i) + to_string(d) + str.substr(i)); } return stoi(ans); } int minimumNumber(int n, int d){ // checking for the negative number int isNeg = 1; if(n < 0){ n *= -1; isNeg = -1; } // converting the current number to string string str = to_string(n); if(isNeg == 1){ return findMin(str,d); } else{ return -1*findMax(str,d); } } int main(){ int n = -124; // given number int d = 3; // given digit // calling to the function n = minimumNumber(n, d); cout<<"The minimum number after adding the new digit is "<<n<<endl; return 0; }
The minimum number after adding the new digit is -3124
Kerumitan masa kod di atas ialah O(N*N), dengan N ialah bilangan digit dalam nombor yang diberikan.
Kerumitan ruang kod di atas ialah O(N), dengan N ialah bilangan digit dalam nombor yang diberikan.
Dalam kaedah sebelumnya, kami telah menyemak setiap nombor, mencari nombor pertama yang lebih besar daripada nombor yang diberikan, kemudian menambahnya dan mengembalikannya sendiri, yang merupakan kaedah yang cekap. Untuk nombor negatif, cari nombor yang lebih kecil, tambah dan kembalikan.
Jom lihat kod−
Terjemahan bahasa Cina bagi#include <bits/stdc++.h> using namespace std; int findMin(string str, int d){ // traversing over the string for(int i=0; i<= str.size(); i++){ if(str[i]-'0' > d){ return stoi(str.substr(0,i) + to_string(d) + str.substr(i)); } } return stoi(str + to_string(d)); } int findMax(string str, int d){ // traversing over the string for(int i=0; i<= str.size(); i++){ if(str[i]-'0' < d){ return stoi(str.substr(0,i) + to_string(d) + str.substr(i)); } } return stoi(str + to_string(d)); } int minimumNumber(int n, int d){ // checking for the negative number int isNeg = 1; if(n < 0){ n *= -1; isNeg = -1; } // converting the current number to string string str = to_string(n); if(isNeg == 1){ return findMin(str,d); } else{ return -1*findMax(str,d); } } int main(){ int n = 124; // given number int d = 3; // given digit // calling to the function n = minimumNumber(n, d); cout<<"The minimum number after adding the new digit is "<<n<<endl; return 0; }
The minimum number after adding the new digit is 1234
Kerumitan masa kod di atas ialah O(N), dengan N ialah bilangan digit dalam nombor yang diberikan.
Kerumitan ruang kod di atas ialah O(N), dengan N ialah bilangan digit dalam nombor yang diberikan.
Dalam tutorial ini, kami melaksanakan kaedah untuk memasukkan nombor dalam nombor tertentu, iaitu menambah nombor baharu yang diberikan sebelum, selepas, atau antara nombor. Kami melihat dua kaedah, satu dengan kerumitan masa O(N*N) dan satu lagi dengan kerumitan masa O(N). Kerumitan ruang kedua-dua kaedah ialah O(N).
Atas ialah kandungan terperinci Cari nombor terkecil yang terbentuk dengan memasukkan nombor yang diberi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!