字符串的全排列

[ 伪代码描述 ]

void Permutation(需要处理的字符串, 需要进行处理的字符串的起始位置)
{
	if(扫描完成整个字符串)
		输出当前字符串;

	for(对即将处理的字符串中的每个字符)
	{
		将当前的字符提前到第一个位置;
		求除了第一个字符外,后面所有字符的全排列;
		将提前到第一个位置的字符恢复到未提前之前的位置,以便不影响下次的处理;
	}

}

[ C++实现 ]

template <typename T>  
void CalcAllPermutation(T perm[], int first, int num)  
{  
    if (num <= 1)
        return;  
      
    for (int i = first; i < first + num; ++i) 
    {  
        swap(perm[i], perm[first]);  
        CalcAllPermutation(perm, first + 1, num - 1);  
        swap(perm[i], perm[first]);  
    }  
} 
原文地址:https://www.cnblogs.com/zhyantao/p/11230432.html