أثناء المقابلة أو الاختبار الخطي ، واجهت خوارزميات التربية اليدوية الأربعة التالية حول الترتيب والمجموعة عدة مرات. قم بتدوين ملاحظة هنا وتحقق من الطريقة في المستقبل:
1. صفيف بدون عناصر مكررة ، ابحث عن الترتيب الكامل ؛
2. المصفوفات مع عناصر متكررة ، ابحث عن الترتيب الكامل ؛
3. للحصول على صفيف بدون عناصر مكررة ، ابحث عن المجموعة [مجموعة فرعية] ؛
4. صفيف مع عناصر متكررة ، ابحث عن المجموعة ؛
يمكن تنفيذ الأنواع الأربعة المذكورة أعلاه من الأسئلة باستخدام قالب موحد ، كما هو موضح أدناه:
/ * *[Complet && redracement] *قم بإدراج جميع المجموعات في صفيف ، مثل 1 و 2 AS 1 ، 2 ، 12 ، 21. *يمكن توسيع هذا السؤال إلى أربعة: *1. صفائف بدون أرقام مكررة ، ابحث عن مجموعات*2. صفائف بأرقام مكررة ، ابحث عن مجموعات*3. صفائف بدون أرقام مكررة ، ابحث عن الترتيب الكامل*4. صفائف ذات أرقام مكررة ، ابحث عن الترتيب الكامل *[الفكرة العامة (العودية)]: *تحديد وظيفة: حدد بادئة مجموعة من مجموعة المرشح Clasicate *قم بإزالة رقم من مرشح مجموعة Clasicate في كل مرة ، وأضف بادئة لطباعة البادئة ؛ *قم بإزالة الرقم التالي بشكل متكرر من المرشح الجديد وأضف بادئة *[التحكم في العودية] *استخدم Hashset لحفظ البادئة. قبل الطباعة ، حدد ما إذا كانت Hashset تحتوي على البادئة التي تم إنشاؤها حاليًا. *إذا لم يكن هناك ، فقم بطباعته وأضف Hashset ؛ إذا كان هناك ، لا تطبعها *[مجموعة-》 ترتيب] *ما عليك سوى إضافة حكم قبل الطباعة: إذا كانت مجموعة المرشح مرشحًا فارغًا ، فهذا يعني أن التمرير قد تم الانتهاء منه مرة واحدة وأن يتم إنشاء ترتيب ، ويمكنك طباعة */package xh.offer.practice ؛ import java.util.arrays java.util.list ؛ فئة عامة ListAllGroup {public static void main (string [] args) {string [] array = {"1" ، "2"} ؛ string [] REPREM = {"1" ، "2" ، "1"} ؛ اختبار ListAllGroup = New ListAllGroup () ؛ System.out.println ("********* لا قائمة تكرار *********") ؛ Test.ListAllNoRepeate (Arrays.aslist (Array) ، "") ؛ // تهيئة prefix = "" system.out.println ("********* قائمة تكرار ******") ؛ hashset <string> norepeateset = new hashset <string> () ؛ Test.ListAllRepeate (Arrays.aslist (reperte) ، "" ، norepeateset) ؛ System.out.println ("************* لا تكرار المبكرة ****************************") ؛ test.premutationNorePeate (Arrays.Aslist (Array) ، "") ؛ system.out.println ("*************************** تكرار premattured *************************") ؛ HashSet <String> REPRECTESS = New Hashset <String> () ؛ test.premitchateRepeate (Arrays.aslist (reperte) ، "" ، REPERSET) ؛ } // مجموعة بدون ازدواجية public public void listallnorepeate (قائمة <string> clasicate ، بادئة السلسلة) {if (prefix.length ()! = 0) system.out.println (بادئة) LinkedList <String> (Caliticate) ؛ // يقلل Templist من الرقم ويحفظ مؤقتًا الرقم الذي تمت إزالته في سلسلة TemptString = (سلسلة) templist.remove (i) ؛ // ListAllNoRepeate المتكرر (Templist ، بادئة + TempString) ؛ }} // هناك مزيج مكرر ، إضافة hashset public void listallRepeate (قائمة <string> المرشح ، بادئة السلسلة ، hashset <string> res) {if (prefix.length ()! = 0 &&! res.contains (prefix)) {system.out.println (prefix) ؛ Res.Add (بادئة) ؛ } لـ (int i = 0 ؛ i <canneridate.size () ؛ i ++) {list <string> templist = new LinkedList <String> (cloyicate) ؛ سلسلة tempString = templist.remove (i) ؛ ListAllRepeate (templist ، prefix+tempstring ، res) ؛ // Reledsive}}} // جميع الترتيبات دون ازدواجية ، أضف الحكم Clashicate.size () == 0 public void prematterationnorepate (قائمة <string> calitic ، prefix السلسلة) } لـ (int i = 0 ؛ i <clashicate.size () ؛ i ++) {list <string> templist = new LinkedList <String> (Cloyatic) ؛ سلسلة tempString = templist.remove (i) ؛ PrematterationNorePeate (Templist ، بادئة+TempString) ؛ }} // هناك ترتيب كامل متكرر ، أضف hashset للمساعدة في الحكم والإخراج premattertirepeate prematteredrepeate (القائمة <string> clashicate ، بادئة السلسلة ، hashset <string> res) {if (clashicate.size () == 0 &&! res.contains (prefix)) Res.Add (بادئة) ؛ } لـ (int i = 0 ؛ i <canneridate.size () ؛ i ++) {list <string> templist = new LinkedList <String> (cloyicate) ؛ سلسلة tempString = templist.remove (i) ؛ PrematterationRepeate (Templist ، prefix+tempstring ، res) ؛ }}} ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.