字符串的排列组合

class Solution {
public:
    void change(string str , size_t index){
            if(index == str.length()){
            set_.insert(str);
            return;
        }


        for(size_t i = index  ; i < str.length() ; i++ ){
            char * tmp_buf = (char *) malloc(sizeof(char ) * str.length() + 1);
            memset(tmp_buf , 0,sizeof(char ) * str.length() + 1);
            memcpy(tmp_buf , str.c_str() , str.length());
            char tmp = tmp_buf[index];
            tmp_buf[index] = tmp_buf[i];
            tmp_buf[i] = tmp;

            string tmp_str(tmp_buf);
            free (tmp_buf); 
            change(tmp_str , index + 1);

        }
    }
    vector<string> Permutation(string str) {
        vector<string> vec;
        if(str.length() == 0) return vec;

        change(str , 0 );

        for(auto it = set_.begin() ; it != set_.end() ; it++){
            vec.push_back(*it);
        }
        return vec;
    }
    set <string>  set_;
};

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
主要的递归思路是递归的将第一个字母和后面的字母相调换,最后因为需要排序输出,直接放到了set里面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值