您的位置:首页 > 其它

字符串的排列

2017-06-22 16:24 162 查看
题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: