题目
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]
解题
方法一:回溯
这是一道全排列问题,涉及去重
和leetcode-47:全排列 II是一样的思路
class Solution { public: vector<string> res; string path; void backtracing(string s,vector<bool>& used){ if(path.size()==s.size()){ res.push_back(path); return; } for(int i=0;i<s.size();i++){ if(i>0&&s[i]==s[i-1]&&used[i-1]==false) continue; if(used[i]==false){ used[i]=true; path.push_back(s[i]); backtracing(s,used); path.pop_back(); used[i]=false; } } } vector<string> permutation(string s) { sort(s.begin(),s.end()); vector<bool> used(s.size(),false); backtracing(s,used); return res; } };