// 高效算法:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int cnt = 0;
void swap( char &left, char &right )
{
char tmp = left;
left = right;
right = tmp;
return;
}
void print( char *src, char *pCur )
{
if( '\0' == (*pCur) )
{
cnt++;
cout << src << endl;
return;
}
int len = strlen(pCur);
for( int i = 0; i < len; i++ )
{
swap( pCur[0], pCur[i] );
print( src, pCur + 1 );
swap( pCur[0], pCur[i] );
}
return;
}
void show( char *src )
{
if( NULL == src )
{
return;
}
if( 1 == strlen(src) )
{
cout << src << endl;
return;
}
int len = strlen(src);
for( int i = 0; i < len; i++ )
{
swap( src[0], src[i] );
print( src, src + 1 );
swap( src[0], src[i] );
}
return;
}
int main()
{
int ret = 0;
char buf[] = "abcde";
show(buf);
cout << "total nums: " << cnt << endl;
return ret;
}
///
#include <iostream>
#include <stack>
#include <queue>
#include <algorithm>
#include <string.h>
#include <cstdio>
#include <stdlib.h>
#include <cctype>
#include <stack>
#include <queue>
using namespace std;
// 打印pSrc的所有排列,pSrc中字符各不相同
void printAllSeq( int curLength, const char *pSrc, vector<char> v )
{
int len = strlen(pSrc);
if( curLength == len )
{
for( int i = 0; i < len; i++ )
{
cout << v[i];
}
cout << endl;
return;
}
for( int i = 0; i < len; i++ )
{
if( find( v.begin(), v.end(), pSrc[i] ) == v.end() )
{
v.push_back( pSrc[i] );
printAllSeq( curLength + 1, pSrc, v );
v.resize( v.size() - 1 );
}
}
return;
}
void printAllSeq1( vector<char> result, char *in, int len )
{
if( 1 == len )
{
result.push_back( *in );
for( int i = 0; i < result.size(); i++ )
{
cout << result[i];
}
cout << endl;
return;
}
for( int i = 0; i < len; i++ )
{
char tmp = in[0];
in[0] = in[i];
in[i] = tmp;
result.push_back( in[0] );
printAllSeq1( result, in + 1, len - 1 );
tmp = in[0]; //还原
in[0] = in[i];
in[i] = tmp;
result.resize( result.size() - 1 ); // 移除最后一个元素
}
return;
}
int main()
{
int ret = 0;
vector<char> v1;
//printAllSeq( 0, "abc", v1 );
char buf[] = "abcd";
printAllSeq1( v1, buf, 4 );
return ret;
}
/*
./a.out
abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
./a.out |wc -l
24
*/
字符串的全排列
最新推荐文章于 2020-08-22 04:29:08 发布