描述:
示例:
代码:
class Solution {
public:
void swap(string & str,int i ,int j)
{
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
bool IsExist(vector<string> &result,string &str)
{
auto it = result.begin();
for(;it != result.end();++it)
{
if(*it == str) return false;
}
return true;
}
void PermutationHelp(string &str,int start,vector<string> &result)
{
if(start == str.length()-1)
{
if (IsExist(result, str)) result.push_back(str);
return;
}
for(int i = start;i<(int)str.length();i++)
{
swap(str,start,i);
PermutationHelp(str,start+1,result);
swap(str,start,i);
}
}
vector<string> Permutation(string str) {
vector<string> result;
if(str.size() > 0)
{
PermutationHelp(str,0,result);
sort(result.begin(),result.end());
}
return result;
}
};
思路分析:
上述代码的整体思路是:
设:给定字符串为abc,三个字符(示例即可)
我们知道我们所求的应该是321 = 6 个结果
但是我们可以根据333来进行整体举例,然后通过剪枝(去重)将其中一些删除
代码分析,难点分析:
(此处举例每一部分代码用来干什么)
难点分析:
核心代码分析:
为什么用swap进行交换?而不是其他
因为交换就会导致str中的字符不会重复使用
个人理解:
也就是将给定的str字符串内部的字符进行交换,然后判断是否重复,选择插入result中