3、给出一个函数输出字符串的所有排列
2012-09-05 10:13
267 查看
/************************************************************************/
/* 3 、给出一个函数输出字符串的所有排列 */
/************************************************************************/
template <typename T>
void printVect(vector<T>& s)
{
typename vector<T>::iterator beg = s.begin();
while(beg != s.end())
cout << *beg++;
cout << endl;
}
void arrangementRecursive(char * str, vector<char>&cvect)
{
if(*str == '\0')
{
//打印结果
printVect(cvect);
return;
}
int length = strlen(str);
//函数改变str, 使用tempStr,递归后恢复. 同时保证showArrangement("abc")访问不越界
char * tempStr = new char[length + 1];
for(int i = 0; i < length; ++i)
{
strcpy_s(tempStr, length + 1, str);
//第一个元素和后面元素交换
swap(tempStr[i], tempStr[0]);
//进栈
cvect.push_back(tempStr[0]);
//n - 1个元素全排列
arrangementRecursive(tempStr + 1, cvect);
//以*str开头的排列完成,出栈
cvect.pop_back();
}
delete [] tempStr;
}
void showArrangement(char * str)
{
if(!str)
return;
//cvect保存要打印的排列
vector<char> cvect;
arrangementRecursive(str, cvect);
}
/* 3 、给出一个函数输出字符串的所有排列 */
/************************************************************************/
template <typename T>
void printVect(vector<T>& s)
{
typename vector<T>::iterator beg = s.begin();
while(beg != s.end())
cout << *beg++;
cout << endl;
}
void arrangementRecursive(char * str, vector<char>&cvect)
{
if(*str == '\0')
{
//打印结果
printVect(cvect);
return;
}
int length = strlen(str);
//函数改变str, 使用tempStr,递归后恢复. 同时保证showArrangement("abc")访问不越界
char * tempStr = new char[length + 1];
for(int i = 0; i < length; ++i)
{
strcpy_s(tempStr, length + 1, str);
//第一个元素和后面元素交换
swap(tempStr[i], tempStr[0]);
//进栈
cvect.push_back(tempStr[0]);
//n - 1个元素全排列
arrangementRecursive(tempStr + 1, cvect);
//以*str开头的排列完成,出栈
cvect.pop_back();
}
delete [] tempStr;
}
void showArrangement(char * str)
{
if(!str)
return;
//cvect保存要打印的排列
vector<char> cvect;
arrangementRecursive(str, cvect);
}
相关文章推荐
- 给出一个函数来输出一个字符串的所有排列。
- 给出一个函数来输出一个字符串的所有排列
- 算法40(字符串的排列,给出一个函数来输出一个字符串的所有排列)
- 笔试题:给出一个函数来输出字符串的所有排列
- 70 给出一个函数来输出一个字符串的所有排列
- 给出一个函数来输出一个字符串的所有排列
- 给出一个函数来输出一个字符串的所有排列
- 给出一个函数来输出一个字符串的所有排列。
- 给出一个函数来输出一个字符串的所有排列
- 微软等数据结构+算法面试100题(2)--给出一个函数来输出一个字符串的所有排列
- 写一个函数输出一个字符串中的所有排列
- 给出一个函数来输出一个字符串的所有排列
- 编程:用java 语言实现,输入一个数,就相应地输出的几维数组!||用1、2、2、3、4、5这六个数字,用java写一个函数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连
- 输出一个字符串所有排列。注意有重复字符
- Swift - 排列组合之全排列 (输入一个字符串,输出该字符串包含的字符的所有组合)
- 给定一个字符串,输出所有的排列组合方式
- 【递归】输出一个字符串的所有排列
- 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
- C#实现输入一个字符串输出该字符串字符的所有排列方式
- 给定一个字符串,输出其所有的可能排列