class Solution {
public List<List<Integer>> combine(int n, int k) {
//创建数组
int nums[] = new int[n];
for(int i = 1;i <= n;i++){
nums[i - 1] = i;
}
//创建结果集合
List<List<Integer>> result = new LinkedList<>();
if(nums.length == 0){
return result;
}
//递归求解结果,这个时候递归所求取的元素个数只有k个所以每当遍历到k个时候直接添加元素,没有遍历到k个的据记者遍历
subset(nums,0,new LinkedList<Integer>(),result,k);
//返回最终的结果
return result;
}
public void subset(int[] nums,int index,LinkedList<Integer> subset,List<List<Integer>> result,int k){
//如果结果子集中已经存在k个元素直接添加到结果姐中,不再做其他的操作了
if(subset.size() == k){
result.add(new LinkedList<>(subset));
}else if(index < nums.length){
//如果没有达到k个元素则接着递归加入元素
subset(nums,index + 1,subset,result,k);
subset.add(nums[index]);
subset(nums,index + 1,subset,result,k);
subset.removeLast();
}
}
}
含有k个元素的子集java实现
最新推荐文章于 2023-07-13 19:08:04 发布