米国アルゴリズム - 組合せ問題をバックトラック
二つの整数nとk、1を考えると...、n個の数kのすべての可能な組み合わせを返します。
例:
入力:N = 4、K = 2
出力
:
[ [2,4]、
[3,4]、
[2,3]、
[1,2]、
[1,3]、
[1,4]、
]
実現
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Combinations {
static List<List<Integer>> res;
public static void main(String[] args) {
res = new ArrayList<>();
int n = 4;
int k = 2;
if(n<=0||k<=0||k>n) {
System.out.println("");
}
LinkedList<Integer> c = new LinkedList<>();
generateCombinations(n,k,1,c);
System.out.println(res.toString());
}
private static void generateCombinations(int n, int k, int start, LinkedList<Integer> c) {
// TODO Auto-generated method stub
if(c.size()==k) {
res.add((List<Integer>) c.clone());
return;
}
for(int i=start;i<=n;i++) {
c.add(i);
generateCombinations(n,k,i+1,c);
c.removeLast();
}
return;
}
}