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

数组有序拆分组合提取算法实现求助 含Java场景需求示例

算法逻辑

这个需求属于数组的有序分拆问题,核心逻辑如下:
长度为n的数组,相邻元素之间共有n-1个间隙,每个间隙可以选择拆分或者不拆分,所有拆分选择的组合最终对应所有符合要求的分组结果,总共有2^(n-1)种合法组合。
我们可以用位运算快速枚举所有间隙的拆分状态:用一个整数的二进制位表示每个间隙是否拆分,1代表拆分,0代表不拆分,遍历所有可能的整数即可得到全部分组结果。

Java 实现代码

import java.util.ArrayList;
import java.util.List;

public class OrderedSplit {
    public static void main(String[] args) {
        String[] array = {"AAA", "BBB", "CCC", "DDD"};
        int len = array.length;
        // 总拆分方案数:2^(len-1)
        int totalPlan = 1 << (len - 1);
        int planNo = 0;

        for (int mask = 0; mask < totalPlan; mask++) {
            planNo++;
            System.out.println("// 组合" + planNo);
            List<List<String>> groups = new ArrayList<>();
            List<String> currentGroup = new ArrayList<>();
            currentGroup.add(array[0]);

            // 逐个判断间隙是否需要拆分
            for (int i = 1; i < len; i++) {
                // 当前间隙对应二进制位为1则拆分
                if ((mask & (1 << (i - 1))) != 0) {
                    groups.add(currentGroup);
                    currentGroup = new ArrayList<>();
                }
                currentGroup.add(array[i]);
            }
            groups.add(currentGroup);

            // 格式化输出结果
            StringBuilder output = new StringBuilder();
            for (int i = 0; i < groups.size(); i++) {
                if (i > 0) output.append(",");
                output.append(groups.get(i));
            }
            System.out.println(output);
        }
    }
}

运行输出说明

上述代码针对示例数组会输出全部8种合法组合,除了你列出的6种之外,还包含两种未列全的组合:

// 组合7
["AAA","BBB"],["CCC","DDD"]
// 组合8
["AAA","BBB","CCC","DDD"]

所有输出都严格保持原数组元素顺序,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:27:05