递归实现排列组合问题
2018-03-31 12:17
447 查看
在做递归问题时,要保证对递归跳跃的信任,继而对相应的问题寻找其递归实现
(1)组合:先从原始数组中选择一个,再从剩下的集合中选择m-1个;而后,再从剩下的集合中挑选m个元素。
![](https://images0.cnblogs.com/i/640088/201406/051217113951375.png)
(2)排列:为了列出一个长度为n的字符串的所有排列,可以一次挑选n个字母中的一个;然后在后面列出其余的n-1个字母可能的排列组合。
![](https://images0.cnblogs.com/i/640088/201406/051151588171043.png)
问题牵引:在对字符数组进行排序的时候,应当注意传入参数的方式,即 char str[] 和 char * str的区别
char * str 的str,指向一块内存区域,可以随时改变;但其指向的内容不可以修改
char str[] 其地址不可改变,即常量指针;但数组内容可以改变
(1)组合:先从原始数组中选择一个,再从剩下的集合中选择m-1个;而后,再从剩下的集合中挑选m个元素。
![](https://images0.cnblogs.com/i/640088/201406/051217113951375.png)
/*组合代码(eg:5选2)*/ int a[5]={1,2,3,4,5};//原始数组 int b[2];//挑选的结果 const int need=2;//需要选择的个数 void combine(int start,int end,int x) { if(x==need) { //(1)打印组合的内容 for(int i=0;i<need;i++) { cout<<b[i]<<" "; } cout<<endl; //(2)对每一种组合进行排列 //permute(b,0,2);//见下 return; } if((end-start)<(need-x))//如果剩下的元素个数<需要的数 { return; } b[x]=a[start];//先选择一个 combine(start+1,end,x+1);//再从剩下的集合中选择m-1个 combine(start+1,end,x);//然后再从剩下的集合(即缩小的集合中选择m个) }
(2)排列:为了列出一个长度为n的字符串的所有排列,可以一次挑选n个字母中的一个;然后在后面列出其余的n-1个字母可能的排列组合。
![](https://images0.cnblogs.com/i/640088/201406/051151588171043.png)
/*排列函数*/ /*参数:c 为 int 型数组的地址 start 为排列数组的起始下标 end 为排列数组的结束下标+1 */ void permute(int c[],int start,int end) { if(start==end) //挑选完毕 { /*打印数组*/ for(int i=0;i<end;i++) { cout<<c[i]<<" "; } cout<<endl; } else { for(int i=start;i<end;i++) { swap(c[i],c[start]);//一次挑选n个字母中的一个 permute(c,start+1,end);//再对其余的n-1个字母一次挑选 swap(c[i],c[start]);//恢复原字符串 } } }
问题牵引:在对字符数组进行排序的时候,应当注意传入参数的方式,即 char str[] 和 char * str的区别
char * str 的str,指向一块内存区域,可以随时改变;但其指向的内容不可以修改
char str[] 其地址不可改变,即常量指针;但数组内容可以改变
相关文章推荐
- Java 非递归实现的排列组合中的平均分组问题
- 多个数组间元素排列组合问题求解(Java实现) 标签: 递归排列组合循环
- 递归实现排列组合问题
- 排列组合的递归实现
- 排列与组合的Java递归实现 (参考)
- c语言实现排列组合算法问题
- 递归实现排列组合
- java 递归 实现数字的排列组合
- java 排列组合(递归实现)
- 递归求解几类排列组合问题(五、生成全子集组合排列)
- 递归求解几类排列组合问题(四、普通选择性组合排列)
- 递归求解几类排列组合问题(六、非重复生成全子集组合排列)
- 用递归实现排列组合
- 递归实现数字排列组合
- 12个字母任选5个进行排列组合,不可重复 javascript 递归实现
- 递归实现全排列和组合
- 字符串的全排列和组合递归非递归--排列组合扩展问题
- C/C++ 排列组合问题(递归)
- 全排列问题 递归实现
- 递归求解几类排列组合问题(二、全组合排列)