Leetcode--无重复字符串的排列组合

无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。

示例1:

 输入:S = "qwe"
 输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]
示例2:

 输入:S = "ab"
 输出:["ab", "ba"]
提示:

字符都是英文字母。
字符串长度在[1, 9]之间。

思路

使用回溯法,

将每个还未被使用的字符插入到str中,直到所有的字符都被使用才向结果数组插入str

class Solution {
public:
    void perm(string& S, vector& vis, vector& result, string str){
        // 所有的字符都已经插入到了str中
        if((int)S.length()== (int)str.length()){
            result.emplace_back(str);
            return;
        }

        for(int i= 0; i< (int)S.length(); ++i){
            // 如果该字符还未被使用
            if(!vis[i]){
                vis[i]= 1;
                perm(S, vis, result, str+ S[i]);
                vis[i]= 0;
            }
        }
    }
    vector permutation(string S) {
        // 记录字符是否已经被使用
        vector vis((int)S.length(), 0);
        vector result;
        perm(S, vis, result, "");
        return result;
    }
};

 

你可能感兴趣的:(leetcode)