class Solution {
public:
    vector<string> Permutation(string str) {
            vector<string> result;
            if(str.size()<=0)
                  return result;
        
            int start = 0;
     
            permute( str, start, result);
        
            sort( result.begin(), result.end() );
        
            return result;
      }
    
     //采用传引用的方式,处理递归过程中的结果输出
      void permute( string str, int start, vector<string> &result)
      {
//采用递归方式处理字符串,将第一个字符和每个字符交换位置
           //然后再处理每一个除了头字符的字符串, 就这样递归处理
             //当已经到了最后一个字符时候,需要将字符串填入vector,递归收尾
             if(start == str.size()-1)   
             { 
                   result.push_back( str );
                   return;
             }
        
            
             for(int j=start; j<str.size(); ++j)
             {
                   if(j!=start && str[j]==str[start])
                         continue;
             
                   swap(str[start], str[j]);
                                //每次交换后,就开始处理子字符串
                   permute(str, start+1, result);
             
                   swap(str[start], str[j]);
             }
              return ;
      }
};
原文:http://www.cnblogs.com/shewell/p/6502476.html