我正在尝试仅按升序获取列表的所有预定义长度排列。
For example, take the set: "ABCDE"
I'd like the returning result to be:
ABC, ABD, ABE, ACD, ACE, ADE, BCD, BCE, BDE, CDE
换句话说,“B”永远不能出现在“A”(升序)之前,但我希望这个要求中的每一个变化。
我宁愿不使用 LINQ,而且我正在尝试找出实现这一点的最快方法(速度是这个应用程序的一个因素)。
到目前为止,我有一个字符列表列表:
List<List<char>> Combinations;
其中内部“列表”将是类似“ABC”的组合(每个字母都是一个字符),而外部列表将是所有组合的列表。
每个结果集的长度(上例中为 3)需要是动态的,所以我想我需要某种递归......我只是不知道如何实现它。
任何帮助将不胜感激!
编辑
到目前为止,这就是我所拥有的(我觉得我已经接近了......我只是无法让它真正构建最终列表(工会不起作用 - 我是否使用不正确?):
private List<List<char>> AscendingPermute(List<char> InMovements, int Combinations)
{
List<List<char>> Ret = new List<List<char>>();
for(int i = 0; i <= InMovements.Count - Combinations; i++)
{
if(Combinations <= 1){
Ret.Add(new List<char>() {InMovements[i] });
return Ret;
}
else
{
Ret.Union(AscendingPermute(InMovements.GetRange(1, InMovements.Count - 1), Combinations - 1));
}
}
return Ret;
}
我在正确的轨道上吗?我错过了什么?
谢谢!