编写一个方法,返回某字符串的所有排列组合。
2014-02-09 10:17
281 查看
简单构造法:
n=1时,S=a1, 只有字符串a1;
n=2时,S=a1a2,有2种排列组合,a1a2,a2a1
n=3时,S=a1a2a3,排列组合为,a3a1a2, a1a3a2, a1a2a3, a3a2a1, a2a3a1, a2a1a3
根据f(n-1)求f(n),将an插入到f(n-1) 的所有字符串的任意位置。
C++实现:
n=1时,S=a1, 只有字符串a1;
n=2时,S=a1a2,有2种排列组合,a1a2,a2a1
n=3时,S=a1a2a3,排列组合为,a3a1a2, a1a3a2, a1a2a3, a3a2a1, a2a3a1, a2a1a3
根据f(n-1)求f(n),将an插入到f(n-1) 的所有字符串的任意位置。
C++实现:
#include <string> #include <vector> using namespace std; vector<string> getPerms(string str) { if (str.size() == 0) return vector<string>(); vector<string> allperms; allperms.push_back(""); for(string::iterator iter = str.begin(); iter != str.end(); ++iter) { char item = *iter; vector<string> words; for(vector<string>::iterator it = allperms.begin(); it != allperms.end(); ++it) { for(string::size_type i = 0; i <= (*it).size(); ++i) { string word = (*it); word.insert(i, 1, item); words.push_back(word); } } allperms.swap(words); } return allperms; }
相关文章推荐
- 程序员面试金典——解题总结: 9.18高难度题 18.2编写一个方法,洗一副牌。要求做到完美洗牌,换言之,这副牌52!种排列组合出现的概率相同
- 编写一个方法,对字符串进行排序,将所有变位词排在相邻的位置
- 编写一个方法,洗一副牌。要求做到完美洗牌,换言之,这幅牌52!种排列组合出现的概率相同。假设给定一个完美的随机发生器
- 10_9_1编写代码,定义一个基类MyClass,其中包括虚礼方法GetString(),这个方法返回存储在受保护字段myString中的字符串,该字段可以通过只写公共属性ContainedStrin
- 编写一个方法,返回某集合的所有子集
- 编写一个方法,返回某集合的所有子集。
- 给定一个字符串,找出其所有不重复的排列组合
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给定一个stri
- C#--第六周实验--任务2--继续在Class类里编写一个方法,名称为Reconvert,参数一个,但可以是字符串、整数、单精度、双精度,方法功能返回参数的逆序
- 程序员面试金典: 9.11 排序与查找 11.1编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置。
- python请编写一个函数,它接受一个 list,然后把list中的所有字符串变成大写后返回
- 请编写一个方法,返回某集合的所有非空子集。
- Swift - 排列组合之全排列 (输入一个字符串,输出该字符串包含的字符的所有组合)
- 实现一个字符串的所有排列组合
- C#--2.继续在该类中编写一下方法,名称为Reconvert,参数一个,但可以是字符串、整数、单精度、双精度,方法功能返回参数的逆序。
- C#查找字符串所有排列组合的方法
- c#--编写一个名称为MyClass一个类,在该类中编写一个方法,名称为CountChar,返回值为整型,参数两个,第一个参数可以是字符串、整数、单精度、双精度,第二个参数为字符,方法功能返回第二个参
- 编写一个方法,确定某字符串的所有排列组合
- 【Java】编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置
- 1.编写一个名称为MyClass一个类,在该类中编写一个方法,名称为CountChar,返回值为整型,参数两个,第一个参数可以是字符串、整数、单精度、双精度,第二个参数为字符,方法功能返回第二个参数在