链接
题目:
回溯:子集/组合用start(无重复元素不可复选 )
每一轮遍历的起点是 上一轮的序号 i +1 , 所以dfs需要传一个int start
组合问题和子集问题等价!
数据无重复,且不能复选,即(2,1)和(1,2)是一个结果;
子集问题中每一个节点都是子集,但组合问题中当元素个数到达k才将path放入res中!
注意:
集合问题中,给的是数组,for从0到n-1 ;组合问题给的n,for从1到n ;
Java实现:
class Solution {
List<List<Integer>> res=new LinkedList<>();
LinkedList<Integer> path=new LinkedList<>();
public List<List<Integer>> combine(int n, int k) {
dfs(n,k,1); // 注意start从1开始
return res;
}
void dfs(int n,int k,int start){
//终止条件,当元素个数为k则添加
if(path.size()==k){
res.add(new LinkedList(path));
}
for(int i=start;i<=n;i++){
//递归前做选择
path.add(i);
//递归
dfs(n,k,i+1);
//递归后撤销选择
path.removeLast();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89255.html