1. การจัดเรียงที่ทำซ้ำได้: ABC มีสามอักขระและความยาวทั้งหมด 3, AAA, AAB, AAC ...... CCC มีทั้งหมด 27 ชนิด
การใช้แนวคิดของการเรียกซ้ำอักขระตัวแรกสามารถเลือกได้จาก ABC และสามตัวเลือก จากนั้นปัญหาจะถูกเปลี่ยนเป็นกรณีที่ ABC ประกอบด้วยอักขระที่มีความยาว 2 หลังจากการวนซ้ำวนซ้ำความเป็นไปได้ทั้งหมดสามารถพบได้ เพียงควบคุมเงื่อนไขการออกจากลูป
การเรียกซ้ำสามารถใช้ในการประมวลผลและเมื่อไม่ทราบความยาวอักขระมันเป็นการประมวลผลทั่วไป หากคุณรู้ความยาวคุณจะต้องใช้ลูปหลายชั้นเพื่อสรุปข้อสรุป
การเปลี่ยนแปลงระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {char [] chs = {'a', 'b', 'c'}; ต่อ (ถ่านใหม่ [3], CHS, 3-1); } โมฆะคงที่สาธารณะต่อ (char [] buf, char [] chs, int len) {ถ้า (len == -1) {สำหรับ (int i = buf.length -1; i> = 0; -i) system.out.print (buf [i]); System.out.println (); กลับ; } สำหรับ (int i = 0; i <chs.length; i ++) {buf [len] = chs [i]; PER (BUF, CHS, LEN-1); -การเลือกที่ทำซ้ำได้ทั้งหมด 27 สถานการณ์ผลลัพธ์จะแสดงในรูปด้านล่าง
2. การจัดเรียงเต็ม: ยังมีตัวละครสามตัว ABC การจัดเรียงเต็มหมายความว่าตัวละครไม่สามารถทำซ้ำได้ สุดท้าย 3*2 = 6 ผลลัพธ์
คุณสามารถใช้วิธีการใน 1 และตราบใดที่คุณพิจารณาว่าตัวละครทั้งสามมีค่าเท่ากันหรือไม่ที่อยู่ในการจัดเรียงเต็มรูปแบบที่ไม่เท่ากับเป็นสิ่งที่จำเป็น ความซับซ้อนของเวลาดังกล่าวคือ n^n และประเภทของการจัดเรียงเต็มคือ n! ดังนั้นเราต้องออกแบบประเภทของ N! อัลกอริทึม
คุณยังสามารถใช้การเรียกซ้ำได้ มีตัวเลือก N สำหรับสตริงแรกและส่วนที่เหลือจะกลายเป็นปัญหาการเรียกคืนสเกล N-1 ตัวเลือก N สำหรับอักขระตัวแรกทั้งหมดอยู่ในสตริง ดังนั้นตัวละครตัวแรกสามารถใช้เพื่อแลกเปลี่ยนกับตำแหน่งของ 1-N เพื่อให้ได้สถานการณ์ใน N จากนั้นประมวลผลระดับ N-1 ซ้ำ อย่างไรก็ตามหลังจากการประมวลผลจะต้องมีการแทนที่และกลายเป็นตัวละครดั้งเดิม
การจัดคลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {char [] chs = {'a', 'b', 'c'}; จัดเรียง (chs, 0, chs.length); } อาร์เรย์โมฆะคงที่สาธารณะ (char [] chs, int start, int len) {ถ้า (start == len-1) {สำหรับ (int i = 0; i <chs.length; ++ i) system.out.print (chs [i]); System.out.println (); กลับ; } สำหรับ (int i = start; i <len; i ++) {char temp = chs [start]; CHS [start] = CHS [i]; CHS [i] = อุณหภูมิ; การจัดเรียง (CHS, Start+1, Len); temp = chs [เริ่ม]; CHS [start] = CHS [i]; CHS [i] = อุณหภูมิ; -ผลการดำเนินการจะแสดงในรูปด้านล่างโดยมีทั้งหมด 6 ชุดค่าผสม
3. การรวมกัน: การรวมกันทั้งหมดของอักขระสามตัว ABC
ค้นหาชุดค่าผสมทั้งหมดนั่นคือไม่ว่าจะเลือก ABC แต่ละบิตบิตแรกคือ 2 และบิตที่สองคือ 2 - ดังนั้นจึงมีทั้งหมด 2^n 0 หมายถึงไม่ต้องใช้ 1 หมายถึงการเลือกเพื่อให้ AB สามารถแสดงได้ 110 การแสดงทั้งหมดของ ABC คือตั้งแต่ 0 ถึง 2^3-1 จากนั้นการดำเนินการ bitwise หากผลลัพธ์คือ 1 บิตปัจจุบันจะถูกส่งออกและผลลัพธ์ 0 จะไม่ถูกส่งออก
Comb ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {char [] chs = {'a', 'b', 'c'}; หวี (CHS); } โมฆะคงที่สาธารณะร่วมกัน (char [] chs) {int len = chs.length; int nbits = 1 << len; สำหรับ (int i = 0; i <nbits; ++ i) {int t; สำหรับ (int j = 0; j <len; j ++) {t = 1 << j; if ((t & i)! = 0) {// มันจะเป็น 1 เมื่อการดำเนินการคือ 1 system.out.print (chs [j]); }} system.out.println (); -ผลลัพธ์ผลลัพธ์มีดังนี้ พฤติกรรมแรกว่างเปล่าซึ่งหมายความว่าไม่มีใครถูกนำมาใช้
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น