ホームページ > バックエンド開発 > PHPチュートリアル > 文字列を指定すると、考えられるすべての組み合わせを返します

文字列を指定すると、考えられるすべての組み合わせを返します

WBOY
リリース: 2016-07-06 13:52:01
オリジナル
1706 人が閲覧しました

例: abc
は、a、b、c、ab、ac、bc、ca、cb、abc、acb、bac、bca、cab、cbaを返します

返信内容:

例: abc
は、a、b、c、ab、ac、bc、ca、cb、abc、acb、bac、bca、cab、cbaを返します

この質問は非常に興味深いと思います。Python 愛好家として、私は @garry_qian の答えに同意できません。Python は非常に便利な標準ライブラリを提供しているので、これを使用しないのは残念です。簡潔で短い (いや、違う...) ですが、論理的には基本的に次のとおりです: リーリー

この書き方には特別なことは何もなく、2つの

を使ったforリスト内包表記に過ぎません。 同時に、元の質問に近い文字列のリストを返します。


しかし、これは私の中にいくらかの好奇心を呼び起こし、私はそれを自分で書きたいと思いました。同時に、これらの並べ替えや結合ツールを持たない他の言語では、同じロジックを使用してそれを完成させる方が簡単かもしれません。

私が最初に完成させたのは、文字列を置換し、あらゆる長さのすべての文字の組み合わせを返す組み合わせに関する関数でしたが、それらを並べ替えることはしませんでした。

リーリー

テスト: リーリー

予想通り、次の結果が得られました:

  1. 長さ1

    'c', 'b', 'a'

  2. 長さ 2

    'bc', 'ac', 'ab'

  3. 長さ 3

    'abc'

確かに、さまざまな長さのすべての組み合わせが利用可能です。

この書き方は決してベストではありませんが、アイデアとしてはかなり面白いと思います。考え方は、

のすべての組み合わせを考慮することです。つまり、a を採用するか、b を採用するか、および c を採用するかを検討します。したがって、合計 2*2*2 = 8 (2**len(string)) の組み合わせがあり、以下に対応します:'abc' 的所有組合,那不就是分別考慮 a 要不要取,b 要不要取 和 c 要不要取,於是總共 2*2*2 = 8 (2**len(string) リーリー

そこで、

では、ちょっとしたトリックを使って1から7までのバイナリコードを生成し、0と1に基づいてそれぞれの組み合わせにどの文字を使用するかを決定しました。 get_combinations


これはまだタスクを完了していません:

標準的な答えを取得する必要があります。

すべての

組み合わせのすべての順列状況

これにより、

この関数が生成されます:get_permutations リーリー

テスト: リーリー

ロジックは非常に単純で、再帰的メソッドを使用して

すべての順列を見つけます。 固定長度字元組合


上記の 2 つの関数を使用すると、答えを見つけることができます:

リーリー


結論:

  1. タイヤを再発明しないでください。疲れるだけでなく、バ​​カに見えてしまいます

  2. 人生は短い、私はPythonを使っています

リーリー

タグも同時にタグ付けされているのでどちらでも書きましょう。ロジックは同じです。

phppython

コード

リーリー php

コード

リーリー python リーリー

python2.7、@garry_qian と同じですが、他の Python ソリューションを見るのが面倒なので書いて初めて知りました。 リーリー

P(2,3)

P(3,3)

12の可能性



文字列の長さを 2 とすると、すべての組み合わせは 2! + 2! = 4 になります。

文字列の長さを 3 とすると、すべての組み合わせは 3 + 3! + 3! = 15

文字列の長さを 4 とすると、次の式になります: 4! / 4!一般化されました

n! + n! / (n-1)!
コードは投稿しません

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート