字符串的组合——《编程之法》课后题答案
来源:互联网 发布:外设天下淘宝店可靠吗 编辑:程序博客网 时间:2024/06/05 14:18
字符串的所有组合
如果求字符串的所有排列,而是求字符串的所有组合,当输入的字符串是“abc”则它的组合有“a”“b”“c”“ab”“ac”“bc”“abc”。
N个字符的全部组合问题可以分解成从N中1至N个字符组合,而对于从N中取M个数组合,可以分为以下两种情况:
①取这N个字符中的第一个字符,再从后面N-1个字符中取M-1个;
②不取这N个字符中的第一个字符,再从后面N-1个字符中取出M个;
可以简单的理解为解的过程为一个二叉树每次都有选择和不选择两个选项,将选择的暂时存放在一个vector类中,每次递归字符串指针向后移动一位。
/*字符串的所有组合例如 “abc”输出“a”“b”“c”“ab”“ac”“bc”“abc”*/#include <iostream>#include <vector>using namespace std;void Combination(char * s, int n, vector<char> res); //从中取n个元素的组合输出int main(){ char sInput[] = "abcde"; vector<char> Result; for (int i = 1; i <= strlen(sInput); i++) { Combination(sInput, i, Result); cout << endl; } cin.get(); return 0;}void Combination(char * s, int n,vector<char> res) { /* 字符串的所有组合 输入: *s ---输入字符串 n ---取出的符号数 res ---保存结果 */ if (n>strlen(s)||s == NULL) { return; } if (n==0) { for (vector<char>::iterator temp = res.begin(); temp != res.end(); temp++) { cout << *temp; } cout << " "; return; } if (*s=='\0') { return; } else { Combination(s + 1, n, res); //不取第一位,从余下取n位 res.push_back(*s); //将第一位暂存 Combination(s + 1, n-1, res); //取第一位,从余下位取出n-1位 res.pop_back(); }}
运行结果
典型的递归问题,注意递归是否有明确的出口,否则会出现问题。
1 0
- 字符串的组合——《编程之法》课后题答案
- 字符串的旋转——《编程之法》课后题答案
- 字符串的包含——《编程之法》课后题答案
- 字符串的全排列——《编程之法》课后题答案
- 链表回文——《编程之法》课后题答案
- 字符串-字符串的包含-寻找兄弟字符串 课后题答案
- Scala编程思想的课后练习答案
- 编程珠玑十一章课后题答案
- 编程珠玑课后题答案-3.3
- 编程珠玑课后题答案3.4
- 编程珠玑课后题答案-3.5
- 编程珠玑 课后题答案 4.2
- Python学习之《python核心编程》 第二章课后答案
- Python学习之《python核心编程》 第二章课后答案
- 关于“C++primer plus第六版课后编程题答案”18章的说明
- 好东西哦——课后答案
- 李航—统计学习方法第一章课后答案
- 课后题答案
- 首次连接oracle数据库的用户名和密码问题
- 在Android中使用反射到底有多慢?
- 超实用!移动端界面中的版式设计原理(上)
- Ubuntu nVidia显卡双显示器手动调节分辨率
- SpringMVC联手REST实现入门级的CRUD
- 字符串的组合——《编程之法》课后题答案
- pat1027:打印沙漏
- 常用Python第三方库 简介
- 关于局部内部类访问所在方法的参数或局部变量为什么必须是final的
- 超实用!移动端界面中的版式设计原理(下)
- [custom UI series]android 自动排布的标签布局
- MySQL 慢查询日志分析及可视化结果
- OSCache-缓存对象
- linux awk命令详解