38.字符串的排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印
出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
分析
思路就来自书上,用递归的思想来做。
代码
class Solution {
public:
vector<string> Permutation(string str) {
if (str.size() <= 0) return {};
vector<string> ret;
help(str, 0, ret);
return ret;
}
void help(string str, int idx, vector<string>& ret) {
if (idx == str.size()) {
bool isExist = false;
for (string ele: ret) {
if (ele == str) {
isExist = true;
break;
}
}
if (!isExist)
ret.push_back(str);
return;
}
for (int i = idx; i < str.size(); i++) {
char tmp = str[idx];
str[idx] = str[i];
str[i] = tmp;
help(str, idx + 1, ret);
tmp = str[i];
str[i] = str[idx];
str[idx] = tmp;
}
}
};
特殊说明
程序实际上并没有通过全部的case,不过这个oj给的报错信息是有错误的,实际上这个case是正确的。
暂时假定这个程序是ok 的吧,目前没有太多的时间来研究这个问题了
不通过
您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为50.00%
测试用例:
abc
对应输出应该为:
["abc","acb","bac","bca","cab","cba"]
你的输出为:
["abc","acb","bac","bca","cba","cab"]