You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何实现数组相邻元素拼接生成所有可能的分组集合

问题核心逻辑

你需要生成的是输入数组所有相邻元素连续拼接的划分结果,规律非常明确:
长度为n的数组,元素之间共有n-1个间隙,每个间隙只有两种操作选择:

  • 分割:间隙前后的元素归到不同分组
  • 不分割:间隙前后的元素拼接为同一个分组
    因此总共有2^(n-1)种划分结果,和你给出的示例数量完全匹配:
  • 长度为3的输入数组,共4种结果,和第一个示例一致
  • 长度为4的输入数组,共8种结果,和第二个示例一致

实现时可以用位掩码标记每个间隙的分割状态,遍历所有掩码即可生成全部结果,没有重复也不会遗漏。

C# 实现代码
using System;
using System.Collections.Generic;

public static class ConsecutivePartitionTool
{
    /// <summary>
    /// 生成数组所有相邻元素连续拼接的划分组合
    /// </summary>
    /// <param name="input">输入的字符串数组</param>
    /// <returns>所有划分组合的集合</returns>
    public static List<List<string>> GenerateAllPartitions(List<string> input)
    {
        var result = new List<List<string>>();
        int count = input.Count;
        if (count == 0) return result;

        // 总组合数:2^(n-1)
        int total = 1 << (count - 1);
        for (int mask = 0; mask < total; mask++)
        {
            var currentGroup = new List<string>();
            string currentStr = input[0];
            for (int i = 0; i < count - 1; i++)
            {
                // 判断当前间隙是否需要分割
                bool needSplit = (mask & (1 << i)) != 0;
                if (needSplit)
                {
                    currentGroup.Add(currentStr);
                    currentStr = input[i + 1];
                }
                else
                {
                    currentStr += input[i + 1];
                }
            }
            currentGroup.Add(currentStr);
            result.Add(currentGroup);
        }
        return result;
    }

    // 测试入口
    public static void Main()
    {
        // 测试3元素场景
        var input3 = new List<string> { "A", "B", "C" };
        Console.WriteLine("Array Input: {A, B, C}");
        Console.WriteLine("Output:");
        foreach (var partition in GenerateAllPartitions(input3))
        {
            Console.WriteLine($"{{{string.Join(", ", partition)}}}");
        }

        Console.WriteLine();

        // 测试4元素场景
        var input4 = new List<string> { "A", "B", "C", "D" };
        Console.WriteLine("Array Input: {A, B, C, D}");
        Console.WriteLine("Output:");
        foreach (var partition in GenerateAllPartitions(input4))
        {
            Console.WriteLine($"{{{string.Join(", ", partition)}}}");
        }
    }
}
结果说明

运行代码后生成的结果会覆盖你给出的所有组合,仅输出顺序和你示例的顺序有差异——这是位掩码遍历的二进制位顺序导致的,如果你需要固定展示顺序,只需要根据自己的排序规则对返回的结果列表做排序即可。

内容的提问来源于stack exchange,提问作者Donuts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:27:31