ในระหว่างการสัมภาษณ์หรือการทดสอบเป็นลายลักษณ์อักษรฉันได้พบอัลกอริทึมการฉีกขาด 4 ครั้งต่อไปนี้เกี่ยวกับการจัดเรียงและการรวมกันหลายครั้ง จดบันทึกที่นี่และตรวจสอบวิธีการในอนาคต:
1. อาร์เรย์ที่ไม่มีองค์ประกอบที่ซ้ำกันค้นหาการจัดเรียงทั้งหมด
2. อาร์เรย์ที่มีองค์ประกอบซ้ำค้นหาการจัดเรียงทั้งหมด
3. สำหรับอาร์เรย์ที่ไม่มีองค์ประกอบที่ซ้ำกันค้นหาชุดค่าผสม [ชุดย่อย];
4. อาร์เรย์ที่มีองค์ประกอบซ้ำค้นหาการรวมกัน;
คำถามสี่ประเภทข้างต้นสามารถนำไปใช้ได้โดยใช้เทมเพลตแบบครบวงจรดังที่แสดงด้านล่าง:
/ * *[การรวม && การจัดเรียง] *แสดงรายการชุดค่าผสมทั้งหมดในอาร์เรย์เช่น 1 และ 2 เป็น 1, 2, 12, 21. *คำถามนี้สามารถขยายออกเป็นสี่: *1 อาร์เรย์ที่ไม่มีตัวเลขที่ซ้ำกันค้นหาชุดค่าผสม*2 อาร์เรย์ที่มีตัวเลขที่ซ้ำกันค้นหาชุดค่าผสม*3 อาร์เรย์ที่ไม่มีตัวเลขที่ซ้ำกันค้นหาการจัดเรียงเต็ม*4 อาร์เรย์ที่มีตัวเลขที่ซ้ำกันค้นหาการจัดเรียงเต็มรูปแบบ *[แนวคิดทั่วไป (การเรียกซ้ำ)]: *กำหนดฟังก์ชั่น: เลือกคำนำหน้าแบบผสมผสานจากชุดผู้สมัครที่ทำ catericate *ลบตัวเลขจากชุดผู้สมัคร candicate ในแต่ละครั้งและเพิ่มคำนำหน้าเพื่อพิมพ์คำนำหน้า; *ลบหมายเลขถัดไปจากผู้สมัครใหม่และเพิ่มคำนำหน้า *[การควบคุมสำหรับการเรียกซ้ำ] *ใช้ HashSet เพื่อบันทึกคำนำหน้า ก่อนการพิมพ์ให้ตรวจสอบว่า HashSet มีคำนำหน้าที่สร้างขึ้นในปัจจุบันหรือไม่ *หากไม่มีให้พิมพ์และเพิ่ม hashset; หากมีอย่าพิมพ์ *[การรวมกัน-》 การจัดเรียง] *เพียงเพิ่มการตัดสินก่อนที่จะพิมพ์: หากผู้สมัครตั้งค่า candicate ว่างเปล่านั่นหมายความว่าการสำรวจจะเสร็จสิ้นหนึ่งครั้งและการจัดเรียงถูกสร้างขึ้นและคุณสามารถพิมพ์ */แพคเกจ xh.offer. java.util.list; นำเข้า java.util.list; คลาสสาธารณะ ListallGroup {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {string [] array = {"1", "2"}; สตริง [] ซ้ำ = {"1", "2", "1"}; ListallGroup Test = ใหม่ listallgroup (); System.out.println ("********* ไม่มีรายการซ้ำ *********"); test.listallnorePeate (array.aslist (อาร์เรย์), ""); // เริ่มต้นคำนำหน้า = "" system.out.println ("********* รายการซ้ำ ******"); HashSet <String> norePeateset = new HashSet <String> (); test.listallrepeate (array.aslist (repee), "", norepeateset); System.out.println ("*************** ไม่ได้ทำซ้ำ premutation ****************************"); test.premutationNorePeate (array.aslist (อาร์เรย์), ""); System.out.println ("************************* การทำซ้ำ premutation *************************"); HashSet <String> repeatset = new HashSet <String> (); test.premutationRepeate (array.aslist (repee), "", repeatset); } // การรวมกันโดยไม่ต้องทำซ้ำโมฆะสาธารณะ liStallNorePeate (รายการ <String> contericate, คำนำหน้าสตริง) {ถ้า (prefix.length ()! = 0) system.out.println (คำนำหน้า); // ความยาวผลลัพธ์ไม่ใช่ 0 จากนั้นพิมพ์รายการสำหรับ (int i = 0; templist = ใหม่ linkedList <String> (candicate); // Templist ลดจำนวนและบันทึกหมายเลขชั่วคราวที่ถูกลบออกใน Templist String TempString = (String) Templist.remove (i); // listallnorepeate (Templist, คำนำหน้า + tempstring); }} // มีชุดค่าผสมที่ซ้ำกันเพิ่ม hashset public public void listallrepeate (รายการ <string> ผู้สมัคร, คำนำหน้าสตริง, hashset <string> res) {if (prefix.length ()! = 0 &&! res.contains (คำนำหน้า)) {system.out.println res.add (คำนำหน้า); } สำหรับ (int i = 0; i <didate.size (); i ++) {list <string> templist = new LinkedList <String> (cedicate); String tempstring = templist.remove (i); liStallRepeate (Templist, คำนำหน้า+tempstring, res); // recursive}} // การจัดเรียงทั้งหมดโดยไม่ต้องทำซ้ำ, เพิ่มการตัดสิน candicate.size () == 0 โมฆะสาธารณะ premutationNorePeate (รายการ <String> candicate, คำนำหน้าสตริง) {ถ้า ( } สำหรับ (int i = 0; i <canticate.size (); i ++) {list <string> templist = new LinkedList <String> (cuticate); String tempstring = templist.remove (i); PremutationNorePeate (Templist, คำนำหน้า+tempstring); }} // มีการจัดเรียงเต็มรูปแบบซ้ำแล้วซ้ำอีกเพิ่ม hashset เพื่อช่วยในการตัดสินและเอาท์พุทโมฆะสาธารณะ premutationRepeate (รายการ <String> cuticate, คำนำหน้าสตริง, hashset <String> res) {ถ้า (candicate.size () == 0 &&! res.contains (คำนำหน้า) res.add (คำนำหน้า); } สำหรับ (int i = 0; i <didate.size (); i ++) {list <string> templist = new LinkedList <String> (cedicate); String tempstring = templist.remove (i); PremutationRepeate (Templist, คำนำหน้า+tempstring, res); - ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น