码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】字符串的排列

时间:2018-04-11 15:52:06      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:width   play   博文   line   ima   str   代码   void   ==   

原创博文,转载请注明出处!

# 题目

       输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。


# 思路(递归)

      分两步求字符串的全排列:首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换;然后固定第一个字符,求后面所有字符的全排列。

技术分享图片


# 代码

  1 class Solution {
  2 public:
  3     vector<string> Permutation(string str) {
  4         // 存储结果
  5         vector<string> result;
  6         // 边界条件
  7         if(str.size()==0) return result;
  8         // 递归实现字符串的字典序全排列
  9         Permutation(result, str, 0);
 10         // 调整顺序
 11         sort(result.begin(), result.end());
 12         // 返回结果
 13         return result;
 14     }
 15        16     void Permutation(vector<string> &result, string str, int begin)//遍历第begin位的所有可能性
 17     {
 18         // 递归出口
 19         if(begin==str.size()-1) result.push_back(str);
 20 
 21         for(int i=begin; i<=str.size()-1;++i)
 22         {
 23             // 去重
 24             if(i!=begin && str[i]==str[begin]) continue;
 25 
 26             // 全排列
 27             swap(str[i], str[begin]);
 28             Permutation(result, str, begin+1);         29             swap(str[i], str[begin]);
 30         }
 31     }
 32 };

【剑指offer】字符串的排列

标签:width   play   博文   line   ima   str   代码   void   ==   

原文地址:https://www.cnblogs.com/wanglei5205/p/8794650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!