標準2800かっこを削除

7590 ワード

問題の解決策はよく考えられたが、実施速度が遅く、少し時間がかかったので、残念だ.
1.カッコのペアを検索してペア配列を作成
2.配列の組合せを作成し、1から配列までの合計数
3.作成した組合せからかっこのペアを抽出し、削除して出力する
n = input()  #(0/(0))
left_stack=[]
gal=[]
final=set()
for i in range(len(n)):
    if n[i]=='(' :
        left_stack.append(i)
    elif n[i]==')' and len(left_stack) > 0 :
        gal.append((left_stack.pop(),i))
def combination (nums,n) :
    result = []
    if n==0 : return [[]]
    for i in range (len(nums)):
        fixed = nums[i]
        rest = nums[i+1:]
        for c in combination(rest,n-1):
            result.append([fixed]+c)
    return result
for i in range(1,len(gal)+1):
    answers=combination(gal,i)
    for answer in answers:
        temp=list(n)
        for left,right in answer:
            temp[left]=""
            temp[right]=""
        final.add("".join(map(str, temp)))
final = list(final)
final.sort()
for i in range(len(final)):
    print(final[i])
今までシーケンスと組み合わせを実現する関数を使っていましたが、バカですね.
ライブラリがあり、
itertoolsからコンビネーションをインポート