题目
题目链接:https://leetcode-cn.com/problems/combinations/
题目解析:
根据题目给的1234 k=4来解释,
当你递归遍历时
判断集合的大小是否跟 k 值相等,如果相等就加入大集合。
- for循环遍历 j 等于传入的 i 值 然后 j < n+1
1. 给一个linkedlist集合中加入j
2. 然后继续递归但是 j 要加上 1 ,变成后面的内容
3. 将集合回溯继续下一个for循环
代码
class Solution {
//创建大的集合用来存放答案
List<List<Integer>> lists = new LinkedList<>();
public List<List<Integer>> combine(int n, int k) {
//递归调用
go(1,new LinkedList<>(),k,n);
return lists;
}
//递归函数
private void go(int i,LinkedList a, int k, int n) {
//如果集合大小跟k值相等说明组合完成,存入大的集合中
if(a.size()==k) {
lists.add(new LinkedList<>(a));
//System.out.println(lists.toString());
return;
}
//for循环遍历
for(int j=i;j<=n;j++) {
//组合集合加入值
a.add(j);
//继续递归
go(j+1,a,k,n);
//从集合中删除之前加入的值完成回溯
a.removeLast();
//之所以选择linkedlist集合是因为它可以删除头尾两个的值。
}
}
}