从数组中取出n个元素的所有组合(递归实现)
2016-04-27 19:57
363 查看
从数组中取出n个元素的所有组合(递归实现)
原文地址:/article/4999639.html
数组为{1, 2, 3, 4, 5, 6},那么从它中取出3个元素的组合有哪些,取出4个元素的组合呢?
比如取3个元素的组合,我们的思维是:
取1、2,然后再分别取3,4,5,6;
取1、3,然后再分别取4,5,6;
……
取2、3,然后再分别取4,5,5;
……
这样按顺序来,就可以保证完全没有重复。
这种顺序思维给我们的启示便是这个问题可以用递归来实现,但是仅从上述描述来看,却无法下手。
我们可以稍作改变:
1.先从数组中A取出一个元素,然后再从余下的元素B中取出一个元素,然后又在余下的元素C中取出一个元素
2.按照数组索引从小到大依次取,避免重复
依照上面的递归原则,我们可以设计如下的算法,按照索引从小到大遍历:
//arr为原始数组 //start为遍历起始位置 //result保存结果,为一维数组 //count为result数组的索引值,起辅助作用 //NUM为要选取的元素个数 //arr_len为原始数组的长度,为定值 void combine_increase(int* arr, int start, int* result, int count, const int NUM, const int arr_len) { int i = 0; for (i = start; i < arr_len + 1 - count; i++) { result[count - 1] = i; if (count - 1 == 0) { int j; for (j = NUM - 1; j >= 0; j--) printf("%d\t",arr[result[j]]); printf("\n"); } else combine_increase(arr, i + 1, result, count - 1, NUM, arr_len); } }
相关文章推荐
- PHP中界定符的使用
- linux安装phpredis扩展
- android---重写textview自适应屏幕分辨率,压缩字体大小
- PHP pdo编码乱码问题的解决方法
- android---重写EditText自适应屏幕分辨率,压缩字体大小
- seekg前记得手动清除EOF标志位
- 颓废了好久 拾起当初的梦 虚幻4初学 我要做我自己的游戏
- nginx 后端服务器配置端口 request.getserverPort
- android---世界时区列表
- IO库总结——C++Primer第八章
- HDOJ 2063 过山车【匈牙利算法求二分图最大匹配 DFS增广 BFS增广】
- ionic入门教程第十三课-多级分类列表的简单实现
- Android 批量上传图片进度回调
- Java的网络编程-Socket编程
- HDU 1532 最大流模板题
- 团队作业四
- android---对SharePreferences的封装
- Java JDBC | 四种连接数据库的方法
- android---瀑布流gridview
- BZOJ 1211: [HNOI2004]树的计数 purfer序列