Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
For example,
If n = 4 and k = 2, a solution is:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
public class Solution {
/**This code is an implemenatation of bfs idea.<br>
* @author Averill Zheng
* @version 2014-06-05
* @since JDK 1.7
*/
public List<List<Integer>> combine(int n, int k) {
List<List<Integer> > combinations = new ArrayList<List<Integer> >();
if(k > 0){
for(int i = 0; i < n; ++i){
List<Integer> aList = new ArrayList<Integer>();
aList.add(i + 1);
combinations.add(aList);
}
if(k > 1){
for(int j = 1; j < k; ++j){ //j denotes the number of integer in each list
List<List<Integer>> temp = new ArrayList<List<Integer> >();
int length = combinations.size();
for(int l = 0; l < length; ++l){
List<Integer> aList = combinations.get(l);
int lastNumber = aList.get(j - 1);
if(n - lastNumber >= k - j){ // has enough number to get the k combinations
for(int m = lastNumber + 1; m <= n; ++m){
List<Integer> newList = new ArrayList<Integer>();
newList.addAll(aList);
newList.add(m);
temp.add(newList);
}
}
}
combinations = temp;
}
}
}
return combinations;
}
}