米国アルゴリズム - 組合せ問題をバックトラック

米国アルゴリズム - 組合せ問題をバックトラック

二つの整数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;
}
}

 

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/qq_35029061/article/details/91345730