剑指 Offer 38. 字符串的排列

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

 

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

 

示例:

输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]

 

限制:

1 <= s 的长度 <= 8

dfs + set

class Solution {
public:
    bool vis[8];
    set<string> map;
    void dfs(string& s, int k, string str)
    {
        if(k == s.length())
        {
            map.insert(str);
            return;
        }
        for(int i = 0; i < s.length(); i++)
        {
            if(vis[i]) continue;
            vis[i] = 1;
            dfs(s, k + 1, str + s[i]);
            vis[i] = 0;
        }
    }


    vector<string> permutation(string s) {
        vector<string> ret;
        memset(vis, 0, sizeof(vis));
        dfs(s, 0, "");
        for(set<string>::iterator it = map.begin(); it != map.end(); it++)
        {
            ret.push_back(*it);
        }
        return ret;

    }
};

 

posted @ 2022-07-19 17:09  WTSRUVF  阅读(14)  评论(0编辑  收藏  举报