字符串排列

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
class Solution {
public:
     void Permuta(vector<string>& result,string str,int start,int len){
        if(start == len){
            result.push_back(str);
        }else{
            for(int i = start;i<=len;i++){
                bool sgn = true;
                int index = i;
                if(index == start)
                    sgn =true;
                else{
                    while(--index>=start){
                        if(str[index]==str[i])
                            sgn = false;
                    }
                }
                
                if(sgn){
                    swap(str[i],str[start]);
                    Permuta(result,str,start+1,len);
                    swap(str[i],str[start]);
                }
                
            }
        }
    }
    vector<string> Permutation(string str) {
        int len = str.size();
        vector<string> result;
        if(len == 0) return result;
        Permuta(result,str,0,len-1);
        sort(result.begin(),result.end());
        return result;
    }
};

注意的是:如果这个元素出现过那么交换没意义,无论它是和基准元素一样还是和以前被交换过得元素一样!!!!!!

posted @ 2016-07-05 15:34  mokayy  阅读(176)  评论(0编辑  收藏  举报