题目内容
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
1 2
| 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]
|
限制:
解法一:回溯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { private: vector<string> res;
void dfs(string &s,int j){ if(j == s.size() - 1) { res.push_back(s); return; } set<int> st; for(int i = j;i<s.size();i++){ if(st.find(s[i]) != st.end()) continue; // 重复,因此剪枝 st.insert(s[i]); swap(s[i],s[j]); dfs(s,j+1); swap(s[i],s[j]); }
}
public: vector<string> permutation(string s) { dfs(s,0); return res; } };
|
结果
1 2 3 4 5 6 7 8 9 10 11 12
| 执行用时: 44 ms , 在所有 C++ 提交中击败了 51.33% 的用户 内存消耗: 29.8 MB , 在所有 C++ 提交中击败了 22.86% 的用户 通过测试用例: 52 / 52
|