全组合(可包含重复字符)
来源:互联网 发布:淘宝网经营模式 编辑:程序博客网 时间:2024/06/03 13:55
前面写了篇博客,能够实现abc的组合,但是对于去重却没有考虑,下面实现全组合的去重算法:
利用链表保存结果,去除重复的串。
- #include <iostream>
- #include <string.h>
- using namespace std;
- #include <iostream>
- using namespace std;
- typedef struct LNode{
- char data[10];
- LNode* next;
- }*List;
- void InsertList(List &l, char data[])
- {
- LNode *p=new LNode;
- strcpy(p->data,data);
- if(NULL==l)
- p->next=NULL;
- else
- p->next=l;
- l=p;
- }
- void Print(List l)
- {
- LNode *p=l;
- while(p)
- {
- cout<<p->data<<endl;
- p=p->next;
- }
- }
- bool isContain(List l, char data[])
- {
- LNode *p=l;
- while(p && strcmp(p->data,data)!=0 )
- p=p->next;
- if(!p)
- return false;
- else
- return true;
- }
- List l=NULL;
- void Backtrack(char str[], char out[], int length, int curr, int start)//全组合
- {
- for(int i=start; i<length; i++)
- {
- out[curr]=str[i];
- out[curr+1]='\0';
- // cout<<out<<endl;
- if(!isContain(l, out))//判断是否包含此种结果,不包含则插入链表
- InsertList(l, out);
- if(i<length-1)
- Backtrack(str, out, length, curr+1, i+1);
- }
- }
- void main()
- {
- char str[]="1223";
- char *out=new char[strlen(str)+1];
- Backtrack(str, out, strlen(str), 0, 0);
- Print(l);
- }
- 全组合(可包含重复字符)
- 全组合(可包含重复字符)
- C语言实现全排列(部分算法参考网友,可实现重复字符的组合)
- java 数组全排列(可包含重复元素)
- 递归实现全排列(可包含重复元素)
- 输出所有的字符组合(可重复)
- 输出一组元素的全排列(可包含重复元素)
- 集合的全排列(可包含重复元素)
- 给一个字符串(包含重复字符),打印它的所有可能的组合。
- 字符串的排列(全排列,包含重复的字符)
- 对字符串求字典序全排列(字符可重复)
- 可重复组合
- 全排列(可排除重复)
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符。
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
- 包含重复的全排列
- 非重复生成全子集组合排列(含重复数字时,生成不重复全子集组合排列)
- 面试题精选(64):元素可重复组合算法
- 颠倒栈
- 自己实现的动态数组(java.util.Vector)
- mysql与sqlserver 数据库的编写
- 关于native方法
- 写给技术合伙人
- 全组合(可包含重复字符)
- -------汇编语言--标志寄存器--转移指令---
- java回车换行说明
- 设计模式概论
- [心情]毕业那几天
- CListCtrl派生类
- 结构体struct sockaddr_in, struct sockaddr,struct in_addr
- sysctl优化linux网络
- 从数列1,2,3.......n 中 随意取几个数,使其和等于 m