剑指 Offer 38:字符串的排列

剑指 Offer 38:字符串的排列

题目

题目链接
输入一个字符串,打印出该字符串中字符的所有排列。

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

示例:

输入: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;

    }
};
上一篇:C++题解 高精度加法


下一篇:单调队列与滑动窗口问题总结