سؤال

لماذا لا ينتج هذا العدد الصحيح من التباديلات السلسلة؟ بالنسبة

perm("ABC", 3)

يجب طباعة 27 شكاوى مختلفة.

private static List<string> permutated = new List<string>(30000);

public static List<string> perm(string s, int k) { return comb(s, "", k); }

private static List<string> perm(string s, string prefix, int k)
{
    if (k == 0)
    {
        permutated.Add(prefix);
    }
    else 
    {
        for (int i = 0; i < s.Length; i++)
        {
            perm( s.Substring( i + 1 ), prefix + s[i], k - 1 );
        }
    }
    return permutated;
}
هل كانت مفيدة؟

المحلول

أنت تحسب بالفعل مجموعات في البرنامج الخاص بك. بالنسبة comb("ABC", 3) يجب أن يكون هناك نتيجة واحدة.

إذا أردت التباديل بدلا من ذلك (ستة نتائج)، استبدال s.Substring( i + 1 ) في الدالة العودية دعوة مع s.Substring(0, i) + s.Substring(i+1).

إذا كنت تريد 27 نتائج، ما عليك سوى تمرير s بدلا من s.Substring( i + 1 ).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top