用递归实现从M个不同字符中选取N个字符的所有组合
2010-11-02 23:32
357 查看
以前做过类似字符串的题目,当时觉得字符串也能用递归来做非常神奇,后来思考了下,觉得只要抓住字符串是由一个个字符组成的,从第一个字符到最后一个字符每一个都可以作为一次递归,把index作为参数传进去就行,以这种思想为指导才把此题解了出来。
对于每个字符只有两种情况,设当前字符串指针为x, 目标字符串指针为y:
GetString(x,y)= GetString(x+1,y), 不取当前字符
GetString(x,y) = GetString(x+1,y+1), 取当前字符
对于每个字符只有两种情况,设当前字符串指针为x, 目标字符串指针为y:
GetString(x,y)= GetString(x+1,y), 不取当前字符
GetString(x,y) = GetString(x+1,y+1), 取当前字符
////////////////////////////////////////////////////////////////////////// // 递归实现M个字符选N个字符 // // param: // origin: original string // oirIndex: index point to original string // M: length of original string // des: destination string // desIndex: index point to des string // N: length of des string ////////////////////////////////////////////////////////////////////////// void GetString(char* origin, int oriIndex, int M, char* des, int desIndex, int N) { if(M < N) return; //output if(strlen(des) == N) { cout<<des<<endl; return; } //reach the end of origin or des if(oriIndex == M) return; if(desIndex == N) { return; } //pick oriIndex des[desIndex]= origin[oriIndex]; GetString(origin,++oriIndex,M,des,++desIndex,N); //not pick des[--desIndex] = '\0'; --oriIndex; GetString(origin,++oriIndex,M,des,desIndex,N); }
相关文章推荐
- 递归实现 从n个数中选取m个数的所有组合
- 递归实现n个不同字符的所有全排列
- 从数组中取出n个元素的所有组合(递归实现)
- c++ 递归实现不同字母的全排列组合
- 组合问题(从M个不同字符中任取N个字符的所有组合)
- pinyin4j把中文句子(含有多音字字母)转成拼音(二维数组递归求所有组合情况返回list)算法实现!
- 字符串中字符的所有组合(递归方式)
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代
- 【面试经典题之字符串】实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构
- [小算法]从M个不同字符中任取N个字符的所有组合
- 小程序:递归实现所有变位词的排列组合
- CI1.1 实现一个算法,确定一个字符串的所有字符是否全部不同。假使不允许使用额外的数据结构。
- 从M个不同字符中任取N个字符的所有组合
- 确定一个字符串的所有字符全都不同算法实现
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 递归实现字符数组的全排列及组合
- 组合问题(从M个不同字符中任取N个字符的所有组合)
- 从M个不同字符中任取N个字符的所有组合