跳转至

38.字符串的排列 (Medium)*

题目描述*

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

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

限制*

1 <= s 的长度 <= 8

代码*

回溯的全排列问题,先排序然后去重。

class Solution {
private:
    vector<string> res;
    void backtrack(string s, int i) {
        if(i == s.length() - 1) {
            res.push_back(s);
            return;
        }
        for(int j = i; j < s.length(); j++) {
            if(i != j && s[i] == s[j]) {
                continue;
            }
            swap(s[i], s[j]);
            backtrack(s, i + 1);
        }
    }
public:
    vector<string> permutation(string s) {
        sort(s.begin(), s.end());
        backtrack(s, 0);
        return res;
    }
};

最后更新: July 23, 2022