菜鸡思考:
全排列问题,可以用DFS,但这道题怎么DFS呢?我们可以建立一个数组,存放每个字符出现的次数。
菜鸡代码:
class Solution {
public:
vector<string> permutation(string s) {
vector<int> dict(26, 0);
for (char c: s) {
dict[c - 'a'] += 1;
}
string path;
vector<string> ans;
dfs(ans, path, dict, s.length());
return ans;
}
void dfs(vector<string>& ans, string& path, vector<int>& dict, int len) {
if (len == path.length()) {
ans.push_back(path);
return;
}
for (int i = 0; i < 26; ++i) {
if (dict[i]) {
dict[i]--;
path.push_back('a' + i);
dfs(ans, path, dict, len);
path.pop_back();
dict[i]++;
}
}
}
};