Problem
Print all combination of a specified list items.
Solution
public class Combination{
public static void main(String[] arguments){
int[] list = {1, 2, 3, 4};
int[] preceding = {};
Combination.Comb(preceding, list);
}
private static void Print(int[] list){
for(int i = 0; i < list.length; ++i){
System.out.print(list[i] + " ");
}
System.out.println();
}
private static void Copy(int[] destination, int[] source, int start){
for(int i = start; i < source.length; ++i){
destination[i - start] = source[i];
}
}
public static void Comb(int[] preceding, int[] list){
if(list.length == 0){
Print(preceding);
}else{
int[] newPreceding = new int[preceding.length + 1];
Copy(newPreceding, preceding, 0);
newPreceding[preceding.length] = list[0];
int[] newList = new int[list.length - 1];
Copy(newList, list, 1);
Comb(newPreceding, newList);
Comb(preceding, newList);
}
}
}
Output
1 2 3 4
1 2 3
1 2 4
1 2
1 3 4
1 3
1 4
1
2 3 4
2 3
2 4
2
3 4
3
4