递归解决输出一个字符串的全排列问题(缺陷:没有考虑字符串中字符重复的问题)

来源:互联网 发布:淘宝客软文范例 编辑:程序博客网 时间:2024/06/05 17:58
   这个问题,或许对于别人来说很简单,但对于我来说还是挺难的,花了我两天时间,虽然我不是一直在做这个问题。  废话不多说,上代码,自己基本功还有待加强啊。
#include "stdafx.h"#include <vector>#include <iostream>using std::vector;using std::cout;using std::cin;using std::endl;void AllSort(vector<char> vec1, vector<char> vec2, int j,  int n){if(j == n -1){vec2.push_back(vec1[j]);for(int d = 0; d<vec2.size(); d++){cout<<vec2[d];}cout<<endl;vec2.clear();}else{for(int i = j; i < n; i++)//i用于每个位置有多少种排列方式{char temp;vec2.push_back(vec1[i]);//交换位置temp = vec1[i];vec1[i] = vec1[j];vec1[j] = temp;    AllSort(vec1, vec2, ++j, n);//交换位置,恢复原来的样子temp = vec1[i];vec1[i] = vec1[j-1];vec1[j-1] = temp;j = j -1;vec2.pop_back();}}}int _tmain(int argc, _TCHAR* argv[]){char *a = "abca";vector<char> vec1(a, a+4);vector<char> vec2; //存放每种排列方便被打印出来AllSort(vec1, vec2, 0, 4);return 0;}