专题四:综合练习(组合问题的决策树与回溯算法)

以leetode77题为例

题目分析: 

给一个数字n,你可以在1到n中选k个数字进行组合,注意包括1和n,而且通过观察实例

1,2和2,1是一样的,所以我们画决策树的时候,只需要从当前位置往后列举

算法原理分析:

第一步:画决策树:越详细越好

代码设计:

1.全局变量:我需要一个vector<vector<int>>ret数组去搜集每个叶子节点

                     我需要一个path去标记路径,一旦到了叶子结点就放到ret中

                    还有一个是n+k-1,这个可以设计成dfs函数参数传递下去

2.dfs函数:dfs列举从当前位置开始往后,比如上一层已经罗列1,这一层就2开始

                  并且要传index++,标记罗列到什么为止,dfs(int pos,int index);

                  当path.size()==k时就是叶子结点

3.细节:回溯:恢复现场,返回上一层时需要pop

             剪枝:这里没必要,因为我通过index标记了每一层罗列到什么位置即可

             递归出口:path.size()==k时,即当是叶子结点时就返回

代码编写:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值