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);
}
}
}
这是一个Java程序,用于生成从1到n中k个数的所有可能组合。解决方案通过递归方法`helper`实现,避免重复组合并确保结果有序。该算法适用于需要从一系列数字中获取指定数量子集的场景。
643

被折叠的 条评论
为什么被折叠?



