タイトル:
候補の配列とターゲット数のターゲットを指定して、数の合計をターゲットにすることができる候補のすべての組み合わせを見つけます。
候補の各番号は、各組み合わせで1回のみ使用できます。
説明:
すべての数値(ターゲット数を含む)は正の整数です。
ソリューションセットに重複した組み合わせを含めることはできません。
アイデア:一般的なアイデアは質問39と同じですが、各数値は1回しか使用できないという条件下で、2回目の枝刈りが必要です。
手順:
クラスSolution:
def CombinationSum2(自己、候補者:リスト[int]、ターゲット:int)->リスト[リスト[int]]:
candidates.sort()
長さ= len(候補)
長さ<= 0の場合:
戻る[]
結果= []
temp_result = []
デフ補助(インデックス、temp_result、ターゲット):
ターゲット== 0の場合:
result.append(temp_result)
帰る
インデックス==長さまたはターゲット<候補[インデックス]の場合:
帰る
範囲(インデックス、長さ)のtemp_indexの場合:
temp_index>インデックスと候補[temp_index] ==候補[temp_index-1]の場合:
継続する
補助(一時インデックス+ 1、一時結果+ [候補[一時インデックス]]、ターゲット-候補[一時インデックス])
補助(0、temp_result、ターゲット)
結果を返す