我有一个 C# 列表:
- 一个
- 乙
- 一个
- C
- D
- 一个
我怎样才能找到下一个字母的索引总是更大的所有字母组合。因此,在这种情况下,组合可能是:A、AB、ABA、C、CD、ADA...但不是 DC、CB...,因为对于上一个示例,B 索引位于 C 索引之前。使用索引,1、12、123、146、134 会被接受,但像 143 这样的东西不会被接受,因为 4 大于 3。
我有一个 C# 列表:
我怎样才能找到下一个字母的索引总是更大的所有字母组合。因此,在这种情况下,组合可能是:A、AB、ABA、C、CD、ADA...但不是 DC、CB...,因为对于上一个示例,B 索引位于 C 索引之前。使用索引,1、12、123、146、134 会被接受,但像 143 这样的东西不会被接受,因为 4 大于 3。
只需生成 set 的所有非空子集{1,2,3,4,5,6}
。对于每个这样的子集,只需取其数字(按递增顺序)并将它们转换为相应的字母。这样,您将获得所有可能的字母序列。然后,如有必要,您必须删除重复项 - 例如A
将由 sets{1}
和.{3}
{6}
此代码生成所有组合(作为列表的序列):
static void Main(string[] args)
{
GetCombination(new List<char> { 'A','B','C' });
Console.ReadKey();
}
static void GetCombination(List<char> list)
{
for (int i = 1; i < Convert.ToInt32(Math.Pow(2, list.Count)); i++)
{
int temp = i;
string str = "";
int j = Convert.ToInt32( Math.Pow(2, list.Count - 1));
int index = 0;
while (j > 0)
{
if (temp - j >= 0)
{
str += list[index];
temp -= j;
}
j /= 2;
index++;
}
Console.WriteLine(str);
}
}
输出是:
C
B
BC
A
AC
AB
ABC