题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
//以下使用深度优先搜索,属于图算法的一种,英文缩写为DFS即Depth First Search.
using System.Collections.Generic;
class Solution
{
public List<string> Permutation(string str)
{
// write code here
List<string> result = new List<string>();
if (str==null|| str.Length == 0)
{
return result;
}
char[] chars = str.ToCharArray();
//重复的元素自动被移除,且内部会自动做排序
SortedSet<string> temp = new SortedSet<string>();
Permutation(chars, 0, temp);
result.AddRange(temp);
return result;
}
public void Permutation(char[] chars, int begin, SortedSet<string> result)
{
if (chars.Length==0)
{
return;
}
//遍历至最后一个元素,说明全部已交换完成
if (begin==chars.Length-1)
{
result.Add(new string(chars));
return;
}
for (int i = 0; i < chars.Length; i++)
{
swap(chars, begin, i);
Permutation(chars, begin + 1, result);
swap(chars, begin, i);
}
}
public void swap(char[] x, int a, int b)
{
char t = x[a];
x[a] = x[b];
x[b] = t;
}
}