题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路:
dfs。确定一个位置的字符后,把当前位置字符和后面的字符依次交换。相同的字符不交换,最后产生的排列就是没有重复的了。
代码:
class Solution {
public:
vector<string> result;
void has_nxt_permutation(string str, int cur) {
if (cur == str.length()) {
result.push_back(str);
return;
}
for (int i=cur; i<str.length(); ++i) {
if (i != cur && str[i] == str[cur])
continue;
swap(str[i], str[cur]);
has_nxt_permutation(str, cur+1);
}
}
vector<string> Permutation(string str) {
if (str.length() == 0) return {};
// 当前要确定的位置
int cur = 0;
has_nxt_permutation(str, cur);
return result;
}
};
中午又陷入焦虑。不焦虑不焦虑。先把基础搞好,尽人事听天命。好好学习!!!