不考虑重复字符的字符串组合
来源:互联网 发布:疯狂的美图美工助手 编辑:程序博客网 时间:2024/05/01 16:04
转自CSDN用户Hackbuter1的专栏,http://blog.csdn.net/hackbuteer1/article/details/7462447。
因为在学习何海涛的《剑指offer》期间,方法虽好理解,但是算法的具体实现比较困难。因而,参考了网上的代码。并且将苦涩难懂的代码加注释,以方便后来读者使用。
输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入"abc",它的组合有a、b、c、ab、ac、bc、abc。
本题也可以用递归的思路来求字符串的组合。
假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;而是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。下面是这种思路的参考代码:
#include<iostream>#include<vector>#include<cstring>using namespace std;#include<assert.h>void Combination(char *string ,int number,vector<char> &result);//在字符串string中,选择number个字符进行组合,并将所有组合结果放在vector上void Combination(char *string){assert(string != NULL);vector<char> result;int i , length = strlen(string);for(i = 1 ; i <= length ; ++i)Combination(string , i ,result);//依次使用string上的1-length个字符进行组合}void Combination(char *string ,int number , vector<char> &result){assert(string != NULL);if(number == 0){//依次输出本次含有number+1个字符的字符串组合集合(因为是n中选择的number-1个字符)static int num = 1;printf("第%d个组合\t",num++);vector<char>::iterator iter = result.begin();for( ; iter != result.end() ; ++iter)printf("%c",*iter);printf("\n");return ;}if(*string == '\0')return ;result.push_back(*string);Combination(string + 1 , number - 1 , result);//string+1是指内存加1,即需要在剩下的string[n-1]个字符中选取m-1个字符,result.pop_back();Combination(string + 1 , number , result);//string+1是指内存加1,即需要在剩下的string[n-1]个字符中选取m个字符,}int main(void){char str[] = "abc";Combination(str);return 0;}
0 0
- 不考虑重复字符的字符串组合
- 字符串的排列和组合(不考虑字符重复的情况)
- 字符串中字符的所有组合(组合中的先后顺序不考虑)
- [组合算法] 生成不重复的字符串
- 字符串的所有不重复组合
- 字符串的第一个不重复字符
- 字符串剔除不相邻的重复字符
- 字符串------字符流中第一个不重复的字符
- 字符串:字符流中第一个不重复的字符
- 黑马程序员 C#统计一行字符串中各个字母出现的频率(不考虑大小写,不考虑其他字符)
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符。
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
- 字符串查找第一个不重复的字符的实现
- 统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
- 查找字符串中第一次不重复的字符 java
- 获取字符串中的第一个不重复的字符
- 查找字符串中第一个不重复的字符
- 求字符串中不重复字符的最长子串
- 商派BBC系统——商家管理管理中心的菜单配置
- 有关enumerate、block遍历与NSEnumerator枚举器在NSString、NSArray、NSDictionary中的使用总结
- 解锁bios学习总结
- org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
- spring cloud eureka 集群 服务集群 测试
- 不考虑重复字符的字符串组合
- Android Manifest merger failed with multiple errors解决思路
- poj 1195 Mobile phones(树状数组二维)
- 计算机网络体系结构
- layer---弹出多个iframe如何找到父页面方法
- 一些经典的iOS博客
- Win7下打开所有程序打开方式都是Windows Media Center解决办法
- MVC,MVP 和 MVVM 的图示
- [LNMPA搭建六]Apache服务器详细【配置】