我有以下代码,它使用递归来创建输入字符串的所有排列的列表。我很难理解它是如何工作的。该算法的思想是获取第一个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;
}
}