List生成特定的组合集

本文关键字:组合 合集 List | 更新日期: 2023-09-27 18:04:28

我有一个c#列表:

  1. B
  2. C
  3. D

我如何找到所有字母的组合,其中下一个字母的索引总是更大。所以在这种情况下,组合可能是:A, AB, ABA, C, CD, ADA…但不是dc, cb…因为在上一个例子中,B索引在C索引之前。使用索引,1、12、123、146、134是可以接受的,但是像143这样的数字是不可以接受的,因为4比3大。

List生成特定的组合集

生成集合{1,2,3,4,5,6}的所有非空子集。对于每个这样的子集,只需取其数字(按递增顺序)并将其转换为相应的字母。这样你就能得到所有可能的字母序列。然后,如果有必要,您必须删除重复项—例如,A将由{1}, {3}{6}集生成三次。

以下代码生成所有的组合(作为list的序列):

    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