Har*_*rry 3 c# algorithm recursion list permutation
我试图获得列表的所有预定义长度排列,仅按升序排列.
For example, take the set: "ABCDE"
I'd like the returning result to be:
ABC, ABD, ABE, ACD, ACE, ADE, BCD, BCE, BDE, CDE
Run Code Online (Sandbox Code Playgroud)
换句话说,"B"永远不会出现在"A"(升序)之前,但我想要满足这一要求中的每一个变化.
我不想使用LINQ,我正在试图找出实现这个的最快方法(速度是这个应用程序中的一个因素).
到目前为止,我有一个字符列表列表:
List<List<char>> Combinations;
Run Code Online (Sandbox Code Playgroud)
内部"List"将是"ABC"(每个字母为char)的组合,外部列表将是所有组合的列表.
每个结果集的长度(上例中为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;
}
Run Code Online (Sandbox Code Playgroud)
我是在正确的轨道上吗?我错过了什么?
谢谢!
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |