• 27、剑指offer--字符串的排列


    题目描述
    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 
    输入描述:
    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
     
    解题思路:本题求整个字符串的全排列可以看做两步
    1)首先求出所有可能出现在第一位置的字母,即begin与后面所有与它不同的字母进行交换
    2)固定第一个字母,求后面字母的全排列,即递归此时begin = begin+1
     
     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <algorithm>
     5 using namespace std;
     6 class Solution {
     7 public:
     8     vector<string> Permutation(string str) {
     9         vector<string> a;
    10         if(str.empty())
    11             return a;
    12         Permutation(a,str,0);
    13         sort(a.begin(),a.end());//按照字典序输出
    14         return a;
    15      }
    16      void Permutation(vector<string> &array, string str, int begin)//遍历第begin位的所有可能性
    17      {
    18         //一次遍历的结束条件
    19         if(begin == str.size()-1)
    20         {
    21             array.push_back(str);
    22         }
    23         for(int i=begin;i<str.size();i++)
    24         {
    25             if(i!=begin && str[i] == str[begin])
    26             {
    27                 continue;//有与begin位重复的字符串不进行交换,跳过
    28             }
    29             swap(str[i],str[begin]);
    30             //当i==begin时,也要遍历其后面的所有字符
    31             //当i!=begin时,先交换,使第begin位取到不同的可能字符,再遍历后面的字符
    32             Permutation(array,str,begin+1);
    33             swap(str[i],str[begin]);//为了防止重复的情况,还需要将begin处的元素重新换回来
    34         }
    35      }
    36 };
    37 int main()
    38 {
    39     string a = "abc";
    40     Solution s;
    41     vector<string> b;
    42     b = s.Permutation(a);
    43     for(int i=0;i<b.size();i++)
    44     {
    45         cout<<b[i]<<endl;
    46     }
    47     return 0;
    48 }

  • 相关阅读:
    大二暑假学习第一周
    PyQt5+pycharm 中对生成的.py文件无法运行的问题
    尚筹网19总结
    尚筹网19项目部署
    MAC远程连接Linux
    尚筹网17订单、支付
    尚筹网16确认回报、订单
    支付宝沙箱环境
    内网穿透
    支付宝开发平台使用
  • 原文地址:https://www.cnblogs.com/qqky/p/6918095.html
Copyright © 2020-2023  润新知