字符串的所有排列

时间:2013-11-29 14:42:16

标签: algorithm

我有以下代码,它使用递归来创建输入字符串的所有排列的列表。我很难理解它是如何工作的。该算法的思想是获取第一个char,然后将其添加到剩余字符的所有排列的每个位置。我不明白递归是如何工作的。如果你能简洁地解释一下,我会非常感激。这不是一个重复的问题,因为我正在寻找算法如何工作* 而不是* 如何获取字符串的排列。我试过单步执行,如果你F11这个并遵循局部变量,那就最容易让人困惑。

public static List<string> GetPermutations(string s)
    {
        var permutations = new List<string>();
        if (s == null)
        {
            // error case
            return null;
        }
        if (s.Length == 0)
        {
            // base case
            permutations.Add("");
            return permutations;
        }

        char first = s[0]; // get the first character
        string remainder = s.Substring(1); // remove the first character
        List<string> words = GetPermutations(remainder);
        foreach (string word in words)
        {
            for (int j = 0; j <= word.Length; j++)
            {
                permutations.Add(insertCharAt(word, first, j));
            }
        }
        return permutations;
    }

    public static string insertCharAt(string word, char c, int i)
    {
        string start = word.Substring(0, i);
        string end = word.Substring(i);
        return start + c + end;
    }
}

0 个答案:

没有答案