题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

 

思路:http://blog.csdn.net/wangdd_199326/article/details/60149133

直接很逗比。。。居然写出如下的代码。。。。心好累。。。。

class Solution {
public:
    vector<string> Permutation(string str) {
        sort(str.begin(),str.end());
        do {
            return str;
        }while(next_permutation(str.begin(),str.end()));
         
    }
};

  改写了一下,成功。

class Solution {
public:
    vector<string> Permutation(string str) {
        
        vector<string> a;
        if(str.size()==0)	return a;
        sort(str.begin(),str.end());
        do {
            a.push_back(str);
        }while(next_permutation(str.begin(),str.end()));
        return a; 
    }
};

  

 

class Solution {
public:
    vector<string> Permutation(string str) {
    	if(str!="") dfs(str,0);
        return ret;
            
    }
private:
    vector<string> ret;
    void dfs(string str,int s) {
        
        if(s==str.size()) {
            ret.push_back(str);
            return ;
        }
        for(int i=s;i<str.size();i++) {
            if(i!=s &&str[s]==str[i])	continue;
            swap(str[s],str[i]);
            dfs(str,s+1);
        }
    }	
};

  

class Solution {
public:
    set<string> res;
    void fun(string str, int pos)
    {
        if (pos == str.length())
        {
            res.insert(str);
            return;
        }
        for (int i = pos; i < str.length(); ++i)
        {
            swap(str[i], str[pos]);
            fun(str, pos + 1);
            swap(str[i], str[pos]);
        }
    }
    vector<string> Permutation(string str) {
        res.clear();
        vector<string> st;
        if (str.length() == 0)return st;
        fun(str, 0);
        set<string>::iterator it;
        for (it = res.begin(); it != res.end(); ++it)
            st.push_back(*it);
        return st;
    }
}

  

posted on 2017-08-08 22:32  王小东大将军  阅读(161)  评论(0编辑  收藏  举报