当前位置:网站首页>取组合数问题
取组合数问题
2022-07-28 14:39:00 【我不是码神】
需求:
现有一个数组[1,2,3,4……]。里面数字是任意的不重复的。现在要从里面取出N个数字组成一组,导出这些数组。
思路:
这是一个数学上的组合数问题。网上有一些算法可以求出组合数的数量,但现在需要把每一个组合数取出来。首先考虑到必须得用到递归,具体如何取能防止出现重复组合,就比较巧妙了,如果用判断重复不仅low,而且会有非常繁重的计算量,最好就是循环的时候能避开重复组合的问题。
小学里面学过如何数线段个数,或者某种三角形的个数,老师会使用一种方法,比如以第一个端点为准,找到所有线段,再以第二个端点开始找,并且不回头找,因为会重复,这就是典型的组合数,只是N取2的组合。受此启发,可以设计出递归的寻找M取N个组合数。
Iterable<List<int>> comboNum(List<int> m, int n) sync* {
if (n == 1) {
yield* m.map((y) => [y]);
} else {
for (int i = 0; i < m.length - n + 1; i++) {
for (var sub in comboNum(m.sublist(i + 1), n - 1)) {
yield sub..add(m[i]);
}
}
}
}代码解读:
如果取1个数,则返回单个元素的数组,跳出递归
否则,我们循环遍历数组,但不遍历到最后若干个元素,因为需要留足组合数的其他元素。
然后我们递归找到取n-1的所有组合,再把当前元素结合进去就可以了。
==============================
补充,稍作修改后,可以获得组合数的个数
int comboNumCount(int m, int n) {
if (n == 1) {
return m;
} else {
int j = 0;
for (int i = 0; i < m - n + 1; i++) {
j += comboNumCount(m - i - 1, n - 1);
}
return j;
}
}边栏推荐
- Regular expression (4)
- Getting started with crawlers (1) -- requests (1)
- 使用Mock技术帮助提升测试效率的小tips,你知道几个?
- Nftscan and nftplay have reached strategic cooperation in the field of NFT data
- 手把手带你编写一个规范的字符设备驱动
- CANoe使用教程
- Matlab exports high-definition pictures without distortion in word compression and PDF conversion
- 腾讯面试之--请你设计一个实现线程池顺序执行
- Endnote is associated with word
- Rongyun real-time community solution
猜你喜欢

软件架构与设计(六)-----层次结构体

程序员的自我修养

Vs dynamic library debugging
![【删除指定数字——leetcode]](/img/16/b40492d8414a363a3a24f00b4afd47.png)
【删除指定数字——leetcode]

Canoe tutorial

ECCV 2022 | ssp: a new idea of small sample tasks with self-supporting matching

MIT pointed out that the public pre training model should not be used indiscriminately
![[delete specified number leetcode]](/img/16/b40492d8414a363a3a24f00b4afd47.png)
[delete specified number leetcode]

有奖活动分享:使用WordPress搭建一个专属自己的博客后最高可领取iPhone13

详解.NET的求复杂类型集合的差集、交集、并集
随机推荐
如何获取及嵌入Go二进制执行包信息
GRC concept GRC architecture RPC lifecycle
9. Related data accumulation task definition
软件架构与设计(六)-----层次结构体
samba服务器搭建指南
Opencv - draw mask images of multiple instances
[jspwiki]jspwiki installation deployment and configuration
基于RSocket协议实现客户端与服务端通信
软件架构与设计(二)-----架构模型
Some operations of bit operation
分享一下一二线大厂HR面经分享
Framework定制系列(十)-----SystemUI定制状态栏statusbar和导航栏navigationbar教程
The difference between character array and string
Camera连拍自动化测试shell脚本
字符数组和字符串的区别
如何通过adb打开和关闭飞行模式
21. Definition of message processing task
EasyExcel复杂表头导出(一对多)
使用Mock技术帮助提升测试效率的小tips,你知道几个?
生命的感悟