题解 | #字符串的排列#
字符串的排列
http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7
class Solution {
public:
vector<string> res;
void dfs(string str, int x) { // str是排列的string,x是排列到的string的下标
if(x == str.size() - 1) { // 遍历到最后一个数, 证明当前的string已经排列好
res.push_back(str);
return;
}
set<int> st; // char 可以转变为int set存储已经排列好的字符
for(int i = x; i < str.size(); i++) {
if(st.find(str[i]) != st.end()) // 剪枝操作,如果要排列的字符已经经过了排列,则不进行后续操作,进行剪枝
continue;
st.insert(str[i]);
swap(str[x], str[i]);
dfs(str, x + 1);
swap(str[x], str[i]);
}
}
vector<string> Permutation(string str) {
dfs(str, 0);
return res;
}
};
查看2道真题和解析
