-2

数列の組み合わせを見つけることができるアルゴリズム(できればJava)が必要です。これが私が達成したい例です。

与えられた番号のシーケンスが次のようになっていると仮定します:1 2 3

私は出力が次のようになることを期待しています:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
1 2
1 3
2 1
2 3
3 1
3 2
1
2
3

私はこれをスタックオーバーフローで以前に検索したことを覚えています、そして私は答えを見つけました、しかしそれは2年前のようでした。今、私はプロジェクトを行っていますが、そのアルゴリズムが再び必要になりました。

4

2 に答える 2

2

車輪の再発明をしたいのでなければ、itertools.permutationはあなたが探していることをします

num = [1, 2, 3]
from itertools import permutations, chain
perm = chain(*(permutations(num, n) for n in range(len(num),0,-1)))
print '\n'.join(' '.join(map(str,e)) for e in perm)

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
1 2
1 3
2 1
2 3
3 1
3 2
1
2
3
于 2013-01-10T05:51:51.990 に答える
2

Pythonは「バッテリー付属」と呼ばれることが多く、これには十分な理由があります。

permutationsitertoolsモジュールで利用可能です。

>>> from itertools import permutations
>>>
>>> l = [1,2,3]
>>> all_permutations = []
>>> for i in range(2, len(l) + 1):
...     all_permutations.extend(list(permutations(l, i)))
...
>>> all_permutations.extend(l)
>>> all_permutations
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2), (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1), 1, 2, 3]
于 2013-01-10T05:53:17.620 に答える