本文最后更新于:2020年6月29日 晚上

题目描述:

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

其实之前已经写过全排列问题了。。。请戳传送门全排列问题算法分析与实现(递归、非递归)。这次仅仅是更改了接口,算法思想不变。

实现如下:

//使用STL中的next_permutation,判断是否存在下一个字典序列
class Solution 
{
	vector<string> strVec;//存储排列情况
public:
	vector<string> Permutation(string str) 
	{
		if (str.size() == 0) return strVec;//防御性动作
        
		sort(str.begin(), str.end());//先将字符串有序化
		do
		{
			strVec.push_back(str);//第一种情况直接添加
		} while (next_permutation(str.begin(), str.end()));//判断是否存在下个字典系列
		return strVec;
	}
};