zoukankan      html  css  js  c++  java
  • 剑指Offer——字符串的排列

    题目描述:

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

    输入描述:

    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。


    分析:

     全排列。

    1. 先从小到大排序。
    2. 从后往前找到相邻两个值,左边<右边的。
    3. 从后往前找到第一个大于左边的数。
    4. 交换倒数第一个大于左边的数和左边的数。
    5. 将右边到末尾的数全部翻转。
    6. 循环上面2-5步,直到找不到左边<右边的情况。


    代码:

     1 class Solution {
     2 public:
     3     vector<string> Permutation(string str) {
     4         vector<string> permutations;
     5         if(str == "") return permutations;
     6         sort(str.begin(), str.end());
     7         do {
     8             permutations.push_back(str);
     9         } while(next_permutation(str.begin(), str.end()));
    10         return permutations;
    11     }
    12 };
     1 class Solution {
     2 public:
     3     vector<string> Permutation(string str) {
     4         vector<string> permutations;
     5         if(str == "") return permutations;
     6         sort(str.begin(), str.end());
     7         permutations.push_back(str);                    // 加入排序后的第一组排列
     8         int strLen = str.length();
     9         int i = strLen - 1;
    10         while(true) {
    11             int i1 = i--;
    12             if(i >= 0 && str[i] < str[i1]) {            // 找到相邻两个值,左边<右边的
    13                 int i2 = strLen - 1;
    14                 while(!(str[i] < str[i2])) i2--;        // 从后往前找到第一个大于左边的数
    15                 swap(str[i], str[i2]);                  // 交换倒数第一个大于左边的数和左边的数
    16                 reverse(str.begin() + i1, str.end());   // 将右边到末尾的数全部翻转
    17                 permutations.push_back(str);
    18                 i = strLen - 1;
    19                 continue;
    20             }
    21             if(i <= 0) break;                           // 数组中没有数左边<右边,排列结束
    22         }
    23         return permutations;
    24     }
    25 };
  • 相关阅读:
    <转> Lua使用心得(2)
    (转) Lua使用心得一 LUA和VC整合
    Highcharts 的实际实践一
    Springmvc4 com/fasterxml/jackson/core/JsonProcessingException
    如何在其他电脑上运行VS2005编译的DEBUG版应用程序
    [转]深入分析 Java 中的中文编码问题
    自动白平衡技术(WhiteBalance)(转自Harri的blog)
    沉思录(1)——EricKing工作的一个月
    图像处理一(BMP的格式说明)
    ios检查版本更新
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747649.html
Copyright © 2011-2022 走看看