Combinations
Description
Given two integers n and k. Return all possible combinations of k numbers out of 1, 2, … , n.
public class Solution {
/**
* @param n: Given the range of numbers
* @param k: Given the numbers of combinations
* @return: All the combinations of k numbers out of 1..n
*/
public List<List<Integer>> combine(int n, int k) {
// write your code here
List<List<Integer>> results = new ArrayList<>() ;
if(n < k){
return results ;
}
helper(n , k , 1 ,new ArrayList<Integer>() , new HashSet<Integer>(),results) ;
return results ;
}
public void helper(int n , int k ,int start, List<Integer> subset , Set<Integer> set , List<List<Integer>> results){
if(subset.size() == k){
results.add(new ArrayList<Integer>(subset)) ;
}
for(int i = start ; i <= n ; i++){
if(set.contains(i)){
continue ;
}
set.add(i) ;
subset.add(i);
Collections.sort(subset);
helper(n , k,i+1, subset, set, results);
set.remove(i);
subset.remove(subset.size()-1);
}
}
}