安全offer27を証明する:辞書式順序は、文字列内の文字のすべての順列を出力します

1つのタイトル説明

  文字列の入力は、辞書式順序で文字列の文字のすべての順列を出力します。例えば、入力文字列abcの場合は、ABCのすべての文字列、B、Cが出て配置することができ、ACB、BAC、BCA、CABおよびCBAを印刷します。

説明を入力します。

  9(おそらく繰り返し文字)以下での文字列を入力し、文字は小文字のみが含まれます。

2つのアイデアや方法

  最初の文字固定、再帰後ろ最初の文字列の様々な組合せを得、次いで、最初の文字が各交換後の文字は、再帰的に取得されるのと同じ文字列がそれらの組合せ;各再帰は、最後のビット時間であり、再帰サイクル、第2文字列を順次サブそれぞれの最初の文字に切り替え、その後、ストリングの処理を継続します。

3 C ++コアコード

1  クラスソリューション{
 2  公共3      ベクトル< ストリング > 結果。
4      ベクトル< ストリング >順列(文字列strの){
 5          であれば(str.length()== 0 6              リターン結果。
7          permutation1(STR、0 );
8          ソート(result.begin()、result.end())。
9          リターン結果;
10      }
 11      空隙 permutation1(文字列 strの、int型開始){
12          であれば(==始めるstr.length())
 13          {
 14              result.push_back(STR)を、
15              リターン;
16          }
 17          のためにint型 I =始める;!STRを[I] = ' \ 0 ' ; iは++ 18          {
 19              場合(!I =始める&& STR [開始] == STR [i])と
 20                  続けます21              スワップ(STR [開始]、STR [I])。
22              permutation1(STR、+始まる1 )。
23              スワップ(STR [開始]、STR [I])。
24         }
 25      }
 26 }。
コードの表示

4 C ++完全なコード

1の#include <stdio.hの>
 2の#include <ベクトル>
 3の#include <iostreamの>
 4の#include < ストリング >
 5  
6  使用して 名前空間STD。
7  
8  ボイドスワップ(チャー&、チャーB){
 9      チャー TEMP = 10      = B。
11      B = TEMP。
12  }
 13  空隙 permcore(文字列リスト、INT低い、INT高い、ベクトル< ストリング>&RES){
 14      IF(低高&& ==
 15          検索(res.begin()、res.end()、リスト)res.end ==()){   // 重複除外
16          res.push_back(一覧) ;
 17      }
 18である     {
 19          のためには、int型 I =がLow;私は=高<; Iは++){ // 第一スイッチング素子の各素子
20は             IF(I ==低||リスト[I] =リスト[!低]){     // デエンファシス
21は                 スワップ(リスト[I]、リスト[低]);
 22である                  permcore(一覧、低+ 。1、高、RES); // 交換後、パーマとサブ機能を付与するサブシーケンスを得ることフル順列シーケンス
23                 スワップ(リスト[I]、リスト[低]); // 最後に、スイッチング素子バック、復元、および他のスイッチング素子
24              }
 25          }
 26れる     }
 27  }
 28  
29ベクター< ストリング >パーマ(文字列STR)
 30  {
 31は      ベクトル< ストリング > RES。
 32      IF(!str.empty())
 33である          permcore(STR、0、str.size() - 1 、RES)
 34が     復帰RES;
 35  }
 36  
37 [  INT メイン()
38  {
 39      ベクター< ストリング > RES。
40      文字列 stdstr = " ABB " 41の      RES = パーマ(stdstr)。
42      のための(自動S:RES)
 43          COUT << S << ENDL。
44      COUT << ENDL。
45  
46       stdstr2 = " AAB " 47の      RES = パーマ(stdstr2)。
48      (オートS:RES)
 49          coutの<< S << てendl;
50     coutの<< てendl;
51  
52      システム(" 一時停止" )。
53      リターン 0 ;
54 }
コードの表示

参考資料

https://blog.csdn.net/JarvisKao/article/details/76999473

おすすめ

転載: www.cnblogs.com/wxwhnu/p/11414103.html