排列组合之组合问题算法实现

声明:本算法参考了网上其它的一些算法,在此表示感谢,由于是时隔很久的一个总结,相关参考链接已经忘了,故此处没有给出参考页面,敬请见谅~~~

组合问题:

问题:

给定两个数nr,求出从1n中选出r个数的组合

例如 n=5, r=3

结果:1,2,3  1,2,4  1,2,5  1,3,4  1,3,5  1,4,5  2,3,4  2,3,5  3,4,5

 

注意:

如果你需要对一个数组的内容进行组合,你可以先对数组下标进行组合,然后再根据下标转换成对应的内容,故本算法具有通用性。

 

1.采用回溯法实现

分析:

主要有两个回溯点,最外层的回溯点 a[i]=n时需要回溯

                  其它层回溯点 a[i] > i + r 当前数组值a[i]肯定是小于索引i+ r

例如上例:a[0] 1~3  a[1] 2~4  a[2] 3~5  规律a[i] i+1~ i + r

 

 

 

 2.递归方式实现

 

我们知道a[r-1] n-r+1 ~ n,对于comb(n,r),假设已经选取了a[r-1],剩余的问题就是comb(n-1, r-1),可以使用递归来实现

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值