我试图创建一系列数字的所有可能数字组合的子集。这是一个例子:
数字清单:1,2,3,4,5,6
子集(组中的3个数字):
1,2,3
1,2,4
1,2,5-
1,2,6
1,3,4
1,3,5
1,3,6-
-1,4,5-
-1,4,6-
1,5,6
2,3,4-
2,3,5-
2,3,6-
2,4,5-
2,4,6-
2,5,6-
3,4,5-
-3,4,6-
-3,5,6-
4,5,6
我在尝试确定循环算法以实现此列表时感到困惑。我可以看到我需要一个嵌套循环,但逻辑逃脱了我。此示例包含所有可能的3个数字组,但仅作为示例。我需要能够扩展到更大的列表和更多的组。请帮忙!
我是一个Java迷,所以我很欣赏Java解决方案,但对任何语言甚至伪代码的解释都很满意。
答案 0 :(得分:1)
我写了一个递归代码 -
public class SubSetsOfLengthK {
public static void main(String[] args) {
int n = 6;
int k = 3;
int[] arr = new int[k];
printSubSets(1,n,k,arr,0);
}
/*
Method prints all the subsets of length k of set (1.....n)
*/
private static void printSubSets(int start, int n, int k, int[] arr, int pos) {
if(k==0) {
for(int a : arr) {
System.out.print(a+" ");
}
System.out.println();
return;
}
for(int j=start;j<= n;j++) {
arr[pos] = j;
printSubSets(j+1,n,k-1, arr, pos+1);
}
}
}
要快速访问,您可以在此处查看https://coderpad.io/2R9CAG47