整数数组的组合问题
来源:互联网 发布:js delete 编辑:程序博客网 时间:2024/05/29 19:37
2015年9月16日,美团南京站南京邮电大学笔试题目之一。
大致的题意是这样的:
有一个元素各不相同的整数数组,输入元素的所有组合,长度由大到小。例如:[1, 2, 3, 4],依次输出1234,123,134,234,12,13,14,23,24,1,2,3,4
思路:
1、设输出的组合的长度为m(m<=n)
2、把数组分为两个部分:第一个数和后面的m-1个数
3、如果组合里包含第一个数,则下一步在剩余的n-1个数里选取m-1个字符;如果不包含第一个数,则下一步在剩余的m-1个数里面选取m个数
把n个数中求长度为m的组合分解成:求n-1个数里面长度为m-1个数的组合,以及从n-1个数里面求长度为m的组合的两个子问题,用递归解决。另外,可以使用vector或者statck数据结构存储当前的结果,本文采用的是vector。
// totalLen:数组长度,curIndex:递归过程中的“第一个”元素在数组中的位置,// lengthLeft:组合中需要添加的元素个数,res:存放当前组合的元素void combine(int *a, int totalLen, int curIndex, int lengthLeft, vector<int> &res){if (lengthLeft == 0){vector<int>::const_iterator iter = res.begin();for (; iter != res.end(); ++iter)cout << *iter;cout << "\n";return;}// 若递归过程中希望作为“第一个元素”的位置已超过数组的长度,则退出if (curIndex == totalLen) return;res.push_back(a[curIndex]);combine(a, totalLen, curIndex + 1, lengthLeft - 1, res);res.pop_back();combine(a, totalLen, curIndex + 1, lengthLeft, res);}void combinationOfInt(int *a, int len){if (!a)return;vector<int> res;for (int i = len; i >= 1; --i)combine(a, len, 0, i, res);}int main(void){int a[] = { 1, 2, 3, 4, 5 };combinationOfInt(a, 5);return 0;}
0 3
- 整数数组的组合问题
- 有序数组的组合问题
- 一个数组内的非负整数,能组合成的最大整数
- lingo 简单整数组合问题
- 指定整数数组中输出和为一整数的所有组合
- 指定整数数组中输出和为一整数的所有组合
- 关于任一数组的组合问题
- 多个数组全组合的问题
- 整数数组输出字符串的问题
- 数组组合问题
- 数组中的组合问题
- 给定一个任意长度的java数组,求数组内的数能组合出来的最大整数
- 整数分划问题和钱的组合问题(动态规划)
- 数组元素组合问题分析
- 关于python3中整数数组转bytes的效率问题
- 打印数组的组合
- 数组的组合数
- 整数数组的遍历
- Android中View转换为Bitmap及getDrawingCache=null的解决方法
- python系列之数据处理编程实例
- 体验安装金蝶K/3 Wise 13.0(图文)
- 原来泛型很简单
- js 复制到剪贴板--ZeroClipboard 2.0
- 整数数组的组合问题
- HDU 5006 Resistance 物理 高斯消元
- MyBatis中关于resultType和resultMap的区别
- PHP输入流php://input $HTTP_RAW_POST_DATA $_POST
- c++学习笔记——一种非法的类型转换
- OpenGL之路(三)基本练习
- 查找并删除文件
- Open vSwitch框架解析
- 事物的四大特性、锁