Вопрос

Почему это не дает правильного количества перестановок строк?Для

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