反復を使用した文字列のすべての順列?
このセクションでは、文字列のすべての順列を取得する方法を説明します。再帰的アプローチは非常に単純です。バックトラッキング手順を使用します。ただし、ここでは反復アプローチを使用します。
文字列ABCのすべての順列は、{ABC、ACB、BAC、BCA、CAB、CBA}のようなものです。より良いアイデアを得るためのアルゴリズムを見てみましょう。
アルゴリズム
getAllPerm(str)
begin sort the characters of the string while true, do print the string str i := length of str – 1 while str[i - 1] >= str[i], do i := i – 1 if i is 0, then return end if done j := length of str – 1 while j > i AND str[j] <= str[i – 1], do j := j – 1 done exchange the characters from position str[i - 1], str[j] reverse the string. done end
例
#include <iostream> #include <algorithm> using namespace std; void getAllPerm(string str){ sort(str.begin(), str.end()); while (true){ cout << str << endl; int i = str.length() - 1; while (str[i-1] >= str[i]){ if (--i == 0) return; } int j = str.length() - 1; while (j > i && str[j] <= str[i - 1]) j--; swap(str[i - 1], str[j]); reverse (str.begin() + i, str.end()); } } int main(){ string str = "WXYZ"; getAllPerm(str); }
出力
WXYZ WXZY WYXZ WYZX WZXY WZYX XWYZ XWZY XYWZ XYZW XZWY XZYW YWXZ YWZX YXWZ YXZW YZWX YZXW ZWXY ZWYX ZXWY ZXYW ZYWX ZYXW
-
再帰を使用して文字列のすべての順列を辞書式順序で出力するPythonプログラム
再帰を使用して文字列のすべての順列を辞書式順序で出力する必要がある場合は、「for」ループを使用して要素のシーケンスを反復処理し、「join」メソッドを使用して要素を結合するメソッドが定義されます。 以下は同じのデモンストレーションです- 例 from math import factorial def lexicographic_permutation_order(s): my_sequence = list(s) for _ in range(factorial(len(my_sequence))): &n
-
Pythonでitertoolsを使用して、文字列の最初のn個の異なる順列を出力します
多数のオブジェクトの順列は、更新がさまざまなシーケンスでどのように存在するかを表しています。ただし、同じオブジェクトのシリーズに2つのオブジェクトがある場合があります。その場合、2つのシーケンスは等しくなります。この記事では、特定のオブジェクトのリストから一意のシーケンスのみを表す方法について説明します。 モジュールitertoolsには、これを実現するのに役立つ順列と呼ばれるメソッドがあります。一意の順列を取得するために、個別の要素のみを格納するsetメソッドを利用します。ただし、その前に、sortedメソッドを使用してソートされた順序で要素を取得します。 以下のプログラムでは、Kは、可