c#查找字符串的所有排列组合
// 1. remove first char
// 2. find permutations of the rest of chars
// 3. attach the first char to each of those permutations.
// 3.1 for each permutation, move firstchar in all indexes to produce even more permutations.
// 4. return list of possible permutations.
public string[] findpermutations(string word)
{
if (word.length == 2)
{
char[] _c = word.tochararray();
string s = new string(new char[] { _c[1], _c[0] });
return new string[]
{
word,
s
};
}
list _result = new list();
string[] _subsetpermutations = findpermutations(word.substring(1));
char _firstchar = word[0];
foreach (string s in _subsetpermutations)
{
string _temp = _firstchar.tostring() + s;
_result.add(_temp);
char[] _chars = _temp.tochararray();
for (int i = 0; i < _temp.length - 1; i++)
{
char t = _chars[i];
_chars[i] = _chars[i + 1];
_chars[i + 1] = t;
string s2 = new string(_chars);
_result.add(s2);
}
}
return _result.toarray();
}
