Re: すべての文字を各1回使ってできる文字列パターン
すべての文字を各1回使ってできる文字列パターン - テックノート@ama-ch http://d.hatena.ne.jp/ama-ch/20080523/1211529804
オリジナル:
def pat(arr, level=0, base=""): num = len(arr) if num == 0: print base for i in range(num + level): if num > i: arrclone = arr.replace(arr[i], "") pat(arrclone, level+1, base+arr[i])
いらないところを削ってみた。
def pat(arr, base=""): num = len(arr) if num == 0: print base for i in range(num): arrclone = arr.replace(arr[i], "") pat(arrclone, base+arr[i])
あと名前を僕好みに変更してみた。
>>> def make_permutation(chars, base=""): if not chars: print base else: for i in range(len(chars)): new_chars = chars.replace(chars[i], "") make_permutation(new_chars, base + chars[i]) >>> make_permutation("abc") abc acb bac bca cab cba
でも元の問題の仕様を読んでないのだけど、文字列のreplaceを使う方法だと同じ文字が複数含まれると問題が起きるよね。
>>> make_permutation("aab")
ab
ab
ba
ba
replaceは個数を指定できるので、1個しか置換しないようにすれば一応結果は出るけど、1つ目のaが先に来るaabと2つ目のが先に来るaabの両方が表示されるね。
- new_chars = chars.replace(chars[i], "") + new_chars = chars.replace(chars[i], "", 1)
あ、そんなことをしている場合じゃなかった。続きはまた今度。