字符串的排列

来源:互联网 发布:库里1516赛季每场数据 编辑:程序博客网 时间:2024/05/20 07:36
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。按字典序打印出该字符串中字符的所有排列。

class Solution {public:        vector<string> v;    int leng = 0;        void buildString(string s,char c[],int len,bool flag[]){        if(len == leng){            for(int i = 0; i < v.size(); i++)                if(s == v[i])                    return;            v.push_back(s);            return;        }        for(int i = 0; i < leng; i++){            if(flag[i])                continue;          flag[i] = true;            s += c[i];            buildString(s,c,len+1,flag);            flag[i] = false;            s = s.substr(0,s.length()-1);        }    } vector<string> Permutation(string str) {        if(str.length() == 0)            return v;        char c[10];        c[0] = str[0];        leng = str.length();        for(int i = 1; i < str.length(); i++){            int j = i - 1;            for(; j >= 0; j--){                if(c[j] < str[i]){                    c[j+1] = str[i];                    break;                }else{                    c[j+1] = c[j];                }            }            if(j < 0)             c[0] = str[i];        }        string s = "";        bool flag[str.length()];        for(int i = 0; i < str.length(); i++)            flag[i] = false;       buildString(s,c,0,flag);        return v; }};

0 0
原创粉丝点击