


Bagaimana untuk menghasilkan gabungan permutasi yang tidak diulangi dan tidak bersebelahan dengan watak -watak yang sama berdasarkan set aksara dan bilangan lapisan yang diberikan?
Apr 01, 2025 am 06:18 AMSet dan Lapisan Karakter: Menjana permutasi yang unik
Artikel ini meneroka cara menjana gabungan permutasi tanpa pendua dan tanpa aksara identik berturut -turut berdasarkan set aksara dan bilangan lapisan yang diberikan. Sebagai contoh, set aksara {a, b}, kombinasi permutasi tiga lapisan harus mengandungi AAB, ABA, ABB, BAA, BAB, BBA, dan lain-lain, tetapi bukan AAA, BBB dan watak berulang berturut-turut. Ini memerlukan algoritma untuk mengendalikan deduplikasi dan mengelakkan pertindihan aksara yang berterusan.
Cabaran teras adalah untuk merancang algoritma yang boleh menyesuaikan diri dengan set dan lapisan aksara yang berbeza dan menjana permutasi dengan cekap yang memenuhi kriteria. Artikel ini akan memperkenalkan dua kaedah: kaedah penggantian digital dan kaedah backtracking.
Kaedah 1: Kaedah Penggantian Digital
Kaedah ini merawat kombinasi permutasi sebagai nombor M-digit (M ialah saiz set aksara). Sebagai contoh, set aksara {a, b} sepadan dengan nombor binari. 00 mewakili AA, 01 mewakili AB, dan sebagainya. Dengan melintasi semua nombor M-angka dan menggantikan watak, anda boleh mendapatkan semua kombinasi yang mungkin. Untuk mengelakkan aksara yang sama, nombor m-digit tertentu perlu dikecualikan, seperti nombor di mana semua bit adalah sama.
Contoh kod python:
def solve_digit (arr, m, allow_all_same = false): res, cur = [], [''] * m n = len (arr) all_same_num = 0 untuk _ dalam julat (m): all_same_num = all_same_num * n 1 untuk D dalam julat (n ** m): jika membenarkan_all_same atau d % all_same_num! = 0: untuk saya dalam julat (m -1, -1, -1): cur [i] = arr [d % n] d // = n res.Append (''. Sertai (CUR)) Kembali res cetak (solve_digit ('ab', 2)) # ['ab', 'ba'] cetak (solve_digit ('ab', 2, true)) # ['aa', 'ab', 'ba', 'bb'] cetak (solve_digit ('ab', 3)) # ['aab', 'aba', 'abb', 'baa', 'bab', 'bba'] cetak (solve_digit ('abc', 2)) # ['ab', 'ac', 'ba', 'bc', 'ca', 'cb']
Kaedah 2: Kaedah Backtracking
Backtrace adalah algoritma rekursif yang mendapati hasil dengan mencuba semua kombinasi yang mungkin. Tambah watak pada kombinasi semasa pada setiap langkah dan rekursif menghasilkan kombinasi yang lebih lama. Pada masa yang sama, adalah perlu untuk mengesan sama ada watak -watak terdahulu adalah sama untuk mengelakkan kombinasi yang tidak memenuhi syarat -syarat.
Contoh kod python:
def solve_backtracking (arr, m, allow_all_same = false): res, cur = [], [''] * m def dfs (i, sama): jika i == m: Sekiranya tidak sama: res.Append (''. Sertai (CUR)) Kembali untuk arr: cur [i] = a DFS (I 1, sama dan A == Cur [i - 1]) untuk arr: cur [0] = a dfs (1, tidak membenarkan_all_same) Kembali res cetak (solve_backtracking ('ab', 2)) # ['ab', 'ba'] cetak (solve_backtracking ('ab', 2, true)) # ['aa', 'ab', 'ba', 'bb'] cetak (solve_backtracking ('ab', 3)) # ['aab', 'aba', 'abb', 'baa', 'bab', 'bba'] cetak (solve_backtracking ('abc', 2)) # ['ab', 'ac', 'ba', 'bc', 'ca', 'cb']
Kedua -dua kaedah dapat menyelesaikan masalah ini. Kaedah penggantian digital lebih efisien dan kaedah mundur lebih mudah difahami. Kaedah yang mana untuk dipilih bergantung pada senario aplikasi tertentu dan keutamaan peribadi.
Atas ialah kandungan terperinci Bagaimana untuk menghasilkan gabungan permutasi yang tidak diulangi dan tidak bersebelahan dengan watak -watak yang sama berdasarkan set aksara dan bilangan lapisan yang diberikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kunci untuk menangani pengesahan API adalah untuk memahami dan menggunakan kaedah pengesahan dengan betul. 1. Apikey adalah kaedah pengesahan yang paling mudah, biasanya diletakkan dalam tajuk permintaan atau parameter URL; 2. BasicAuth menggunakan nama pengguna dan kata laluan untuk penghantaran pengekodan Base64, yang sesuai untuk sistem dalaman; 3. OAuth2 perlu mendapatkan token terlebih dahulu melalui client_id dan client_secret, dan kemudian bawa bearertoken dalam header permintaan; 4. Untuk menangani tamat tempoh token, kelas pengurusan token boleh dikemas dan secara automatik menyegarkan token; Singkatnya, memilih kaedah yang sesuai mengikut dokumen dan menyimpan maklumat utama adalah kunci.

Untuk melihat sejarah komited git, gunakan arahan gitlog. 1. Penggunaan asas adalah gitlog, yang boleh memaparkan hash penyerahan, pengarang, tarikh dan maklumat penyerahan; 2. Gunakan Gitlog-Eleline untuk mendapatkan pandangan ringkas; 3. Penapis oleh pengarang atau maklumat penyerahan melalui -pengadil dan --grep; 4. Tambah -P untuk melihat perubahan kod, --Stat untuk melihat statistik perubahan; 5. Penggunaan --graph dan -semua untuk melihat sejarah cawangan, atau menggunakan alat visualisasi seperti gitkraken dan vscode.

Untuk memadam cawangan git, mula -mula pastikan ia telah digabungkan atau tiada pengekalan diperlukan. Gunakan Gitbranch-D untuk memadam cawangan digabungkan tempatan. Jika anda perlu memaksa memadam cawangan yang tidak diturunkan, gunakan parameter -D. Penghapusan Cawangan Jauh menggunakan perintah nama Gitpushorigin-Deletebranch, dan boleh menyegerakkan repositori tempatan orang lain melalui Gitfetch-Prune. 1. Untuk memadam cawangan tempatan, anda perlu mengesahkan sama ada ia telah digabungkan; 2. Untuk memadam cawangan jauh, anda perlu menggunakan parameter --elete; 3. Selepas penghapusan, anda harus mengesahkan sama ada cawangan itu berjaya dikeluarkan; 4. Berkomunikasi dengan pasukan untuk mengelakkan secara tidak sengaja memadamkan cawangan bersama; 5. Cawangan -cawangan yang tidak berguna secara berkala untuk memastikan gudang bersih.

Untuk menguji API, anda perlu menggunakan Perpustakaan Permintaan Python. Langkah -langkahnya adalah untuk memasang perpustakaan, menghantar permintaan, mengesahkan respons, menetapkan masa dan cuba semula. Pertama, pasang perpustakaan melalui PipinstallRequests; kemudian gunakan permintaan.get () atau requests.post () dan kaedah lain untuk menghantar permintaan GET atau pos; Kemudian semak respons.status_code dan response.json () untuk memastikan hasil pulangan mematuhi jangkaan; Akhirnya, tambah parameter tamat masa untuk menetapkan masa tamat, dan menggabungkan perpustakaan semula untuk mencapai percubaan automatik untuk meningkatkan kestabilan.

Dalam Python, pembolehubah yang ditakrifkan di dalam fungsi adalah pembolehubah tempatan dan hanya sah dalam fungsi; Ditakrifkan secara luaran adalah pembolehubah global yang boleh dibaca di mana sahaja. 1. Pembolehubah tempatan dimusnahkan kerana fungsi dilaksanakan; 2. Fungsi ini boleh mengakses pembolehubah global tetapi tidak dapat diubahsuai secara langsung, jadi kata kunci global diperlukan; 3. Jika anda ingin mengubah suai pembolehubah fungsi luar dalam fungsi bersarang, anda perlu menggunakan kata kunci nonlocal; 4. Pembolehubah dengan nama yang sama tidak mempengaruhi satu sama lain dalam skop yang berbeza; 5. Global mesti diisytiharkan apabila mengubah suai pembolehubah global, jika tidak, kesilapan unboundlocalerror akan dibangkitkan. Memahami peraturan ini membantu mengelakkan pepijat dan menulis lebih banyak fungsi yang boleh dipercayai.

Bagaimana cara mengendalikan fail JSON yang besar di Python? 1. Gunakan Perpustakaan IJSON untuk mengalir dan mengelakkan limpahan memori melalui parsing item demi item; 2. Jika dalam format Jsonlines, anda boleh membacanya dengan garis dan memprosesnya dengan json.loads (); 3. Atau memecah fail besar ke dalam kepingan kecil dan kemudian memprosesnya secara berasingan. Kaedah ini dengan berkesan menyelesaikan masalah batasan memori dan sesuai untuk senario yang berbeza.

Di Python, kaedah melintasi tupel dengan gelung termasuk secara langsung melelehkan unsur -unsur, mendapatkan indeks dan elemen pada masa yang sama, dan memproses tuple bersarang. 1. Gunakan gelung untuk terus mengakses setiap elemen dalam urutan tanpa menguruskan indeks; 2. Gunakan penghitungan () untuk mendapatkan indeks dan nilai pada masa yang sama. Indeks lalai adalah 0, dan parameter permulaan juga boleh ditentukan; 3. Di samping itu, tuple tidak berubah dan kandungan tidak dapat diubah suai dalam gelung. Nilai yang tidak diingini boleh diabaikan oleh \ _. Adalah disyorkan untuk memeriksa sama ada tuple kosong sebelum melintasi untuk mengelakkan kesilapan.

Fungsi tulen dalam Python merujuk kepada fungsi yang sentiasa mengembalikan output yang sama tanpa kesan sampingan yang diberikan input yang sama. Certinya termasuk: 1. Determinisme, iaitu, input yang sama selalu menghasilkan output yang sama; 2. Tiada kesan sampingan, iaitu, tiada pembolehubah luaran, tiada data input, dan tiada interaksi dengan dunia luar. Sebagai contoh, Defadd (a, b): Returna B adalah fungsi tulen kerana tidak kira berapa kali menambah (2,3) dipanggil, ia sentiasa mengembalikan 5 tanpa mengubah kandungan lain dalam program ini. Sebaliknya, fungsi yang mengubahsuai pembolehubah global atau menukar parameter input adalah fungsi bukan tujuan. Kelebihan fungsi tulen adalah: lebih mudah untuk diuji, lebih sesuai untuk pelaksanaan serentak, hasil cache untuk meningkatkan prestasi, dan boleh dipadankan dengan baik dengan alat pengaturcaraan berfungsi seperti MAP () dan penapis ().
