1. Pengaturan berulang: ABC memiliki tiga karakter dan semua string panjang 3, AAA, AAB, AAC ...... CCC memiliki total 27 jenis
Menggunakan ide rekursi, karakter pertama dapat dipilih dari ABC dan tiga pilihan. Kemudian masalah diubah menjadi kasus di mana ABC terdiri dari karakter dengan panjang 2. Setelah rekursi loop, semua kemungkinan dapat ditemukan. Kontrol saja kondisi keluar loop.
Rekursi dapat digunakan untuk memprosesnya, dan ketika panjang karakter tidak diketahui, itu adalah pemrosesan umum. Jika Anda tahu panjangnya, Anda hanya perlu menggunakan beberapa lapisan loop untuk menarik kesimpulan.
Permutasi kelas publik {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; per (char baru [3], CHS, 3-1); } public static void per (char [] buf, char [] chs, int len) {if (len == -1) {for (int i = buf.length -1; i> = 0; --i) system.out.print (buf [i]); System.out.println (); kembali; } untuk (int i = 0; i <chs.length; i ++) {buf [len] = chs [i]; per (buf, chs, len-1); }}}Seleksi berulang, total 27 situasi, hasilnya ditunjukkan pada gambar di bawah ini
2. Pengaturan penuh: Masih tiga karakter ABC, pengaturan penuh berarti bahwa karakter tidak dapat diulang. 3*2 = 6 hasil
Anda dapat menggunakan metode ini dalam 1, dan selama Anda menentukan apakah ketiga karakternya sama, yang dalam pengaturan penuh yang tidak sama adalah yang diperlukan. Kompleksitas waktu seperti itu adalah n^n, dan jenis pengaturan penuh adalah n! Jadi kita perlu mendesain semacam N! algoritma.
Anda juga dapat menggunakan rekursi. Ada N pilihan untuk string pertama, dan sisanya menjadi masalah rekursi skala N-1. Pilihan N untuk karakter pertama semuanya ada di string. Oleh karena itu, karakter pertama dapat digunakan untuk menukarnya dengan posisi 1-N untuk mendapatkan situasi di N, dan kemudian secara rekursif memproses skala N-1. Namun, setelah diproses, itu perlu diganti dan menjadi karakter asli.
Kelas publik mengatur {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; atur (chs, 0, chs.length); } public static void array (char [] chs, int start, int len) {if (start == len-1) {for (int i = 0; i <chs.length; ++ i) system.out.print (chs [i]); System.out.println (); kembali; } untuk (int i = start; i <len; i ++) {char temp = chs [start]; CHS [Start] = CHS [i]; CHS [i] = temp; Pengaturan (CHS, Mulai+1, Len); temp = chs [start]; CHS [Start] = CHS [i]; CHS [i] = temp; }}}Hasil operasi ditunjukkan pada gambar di bawah ini, dengan total 6 kombinasi
3. Kombinasi: Semua kombinasi dari tiga karakter ABC
Temukan semua kombinasi, yaitu, apakah setiap bit ABC dipilih, bit pertama adalah 2, dan bit kedua adalah 2. . Jadi ada jenis 2^N secara total. 0 berarti tidak mengambil, 1 berarti seleksi, sehingga AB dapat diwakili oleh 110. Representasi total ABC adalah dari 0 hingga 2^3-1. Kemudian, operasi bitwise, jika hasilnya 1, bit saat ini akan output, dan hasilnya 0 tidak akan output.
Comb Class Public {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; sisir (CHS); } public static void comb (char [] chs) {int len = chs.length; int nbits = 1 << len; untuk (int i = 0; i <nbits; ++ i) {int t; untuk (int j = 0; j <len; j ++) {t = 1 << j; if ((t & i)! = 0) {// Ini hanya akan 1 bila sama dengan operasi adalah 1 system.out.print (chs [j]); }} System.out.println (); }}}Hasil output adalah sebagai berikut. Perilaku pertama kosong, yang berarti tidak ada yang diambil.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.