剑指offer 66题 -- 字符串的排列

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 ;
  }
};

posted @ 2017-03-04 19:54  夜雨寒山  阅读(118)  评论(0编辑  收藏  举报