连续组合一系列数字

我想以连续的方式找到一系列数字的组合。 假设我的数字范围从1到5,那么我的组合列表将像{1} {2} {3} {4} {5} {1,2} {1,2,3} {1, 2,3,4} {1,4,5} {2,3} {2,4} {2,5} {3,4} {3,5} {4,5}。

但是,我的列表中不应包含{1,5} {1,5}等组合。它应该连续设置每个数字。

我已经通过在列表中添加一个左键盘来尝试此操作。在这种情况下,它也在考虑非连续集。

        double count = Math.Pow(2,list.Count);
        for (int i = 1; i <= count - 1; i++)
        {
            string str = Convert.ToString(i,2).PadLeft(list.Count,'0');

            for (int j = 0; j < str.Length; j++)
            {


                if (str[j] == '1')
                {
                    Console.Write(list[j]);

                }
            }
            Console.WriteLine();
        }
Murphy_zhu_qiang 回答:连续组合一系列数字

这是一种简单的方法:

for (int i = 0; i < range.Length; i++)
{
    for (int j = i+1; j <= range.Length; j++)
    {
        Console.WriteLine(string.Join(",",range[i..j]));
    }
}

如果您不使用C#8(因此不能使用范围),则可以使用Skip()Take()

for (int i = 0; i < range.Length; i++)
{
    for (int j = i+1; j <= range.Length; j++)
    {
        Console.WriteLine(string.Join(",range.Skip(i).Take(j-i)));
    }
}

请注意,这将打印{1},{1,2},{1,2,3},{1,3,4},{1,4,5},{2}而不是{1},{2},{3},{4},{5},{1,2}等。如果这很重要,您可以这样调整:

foreach (var item in range)
{
    Console.WriteLine(item);    
}

for (int i = 0; i < range.Length; i++)
{
    for (int j = i+2; j <= range.Length; j++)
    {
        Console.WriteLine(string.Join(",range.Skip(i).Take(j-i)));
    }
}
本文链接:https://www.f2er.com/3133023.html

大家都在问