LeetCode 77:组合

导读:本篇文章讲解 LeetCode 77:组合,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

链接
题目:
在这里插入图片描述

回溯:子集/组合用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

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!