我正在尝试创建数字列表的所有可能数字组合的子集。这是一个例子:
数字列表: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 解决方案,但也很乐意使用任何语言甚至伪代码进行解释。
最佳答案
我写了一个递归代码 -
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
关于java - 无法定义循环算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27254435/