java - 一组整数按大小升序排列的 k 种组合

标签 java algorithm

编程挑战:给定一组整数 [1, 2, 3, 4, 5] 我想在 Java 中生成所有可能的 k 组合强>;例如

[1], [2], [3], [4], [5], [1, 2], [1, 3] ... [1, 2, 3, 4, 5]

生成一个生成所有组合然后对它们进行排序的递归解决方案相当容易,但我想有一种更有效的方法可以消除额外排序的需要。

最佳答案

就做iterative deepening search .

void comb(int... items) {
    Arrays.sort(items);
    for (int k = 1; k <= items.length; k++) {
        kcomb(items, 0, k, new int[k]);
    }
}
public void kcomb(int[] items, int n, int k, int[] arr) {
    if (k == 0) {
        System.out.println(Arrays.toString(arr));
    } else {
        for (int i = n; i <= items.length - k; i++) {
            arr[arr.length - k] = items[i];
            kcomb(items, i + 1, k - 1, arr);
        }
    }
}

然后调用 comb(10,20,30)。它将打印:

[10]
[20]
[30]
[10, 20]
[10, 30]
[20, 30]
[10, 20, 30]

关于java - 一组整数按大小升序排列的 k 种组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2599499/

相关文章:

java - 凸起效应算法说明

Java SFTP 客户端 - 概念

java - 我可以通过 java 代码从 Oracle DB 进行 HTTP 调出吗

algorithm - python ete2 二叉树获取后代值之和

c# - 高效算法计算点之间的距离

java - JSON对所有对象都有唯一的键,如何使用GSON转换为POJO?

java - 使用 JSF 2.0/Facelets,有没有办法将全局监听器附加到所有 AJAX 调用?

java - 改进素筛算法

c - 求两个非常大的数与一个非常大的数相乘的模

c++ - 将多重集排序为升序子序列,每个可用元素出现一次