39.組合せ合計(Python)
2214 ワード
もっと素晴らしい内容は、「力ボタン中等問題」に注目してください.
タイトル
難易度:★☆☆タイプ:配列方法:遡及法
重複要素のない配列candidatesとターゲット数targetを指定し、candidatesのすべての数値とtargetの組合せを見つけます.
candidatesの数字は、無制限に繰り返し選択できます.
説明:
すべての数字(targetを含む)は正の整数です.解セットに重複する組合せを含めることはできません.
例1入力:candidates=[2,3,6,7],target=7,解セット:[[7],[2,2,3]]
例2入力:candidates=[2,3,5],target=8,解セット:[[2,2,2,2],[2,3,3],[3,5]]
に答える
シナリオ1:遡及法
私たちは遡及法を用いてこの問題を解決した.遡及法の思想は、適切でなければ、前のステップに戻ることだ.
遡及操作を実現するための関数helperを書きます.
入力パラメータ現在考察する要素の所在する下標(index); は、現在までの和(cur_sum)に加算される. 現在およびcur_listを構成する一時リスト(cur_list)sumが使用したすべての加算数.
操作フロー操作が合法かどうかを判断し、操作回数を制限するために使用され、2つの判断条件がある:(1)現在考察されている要素の所在する下標iが合法かどうか、境界が現れるかどうか;(2)現在までの和cur_sumが目標値targetを超えたかどうか、超えた場合は操作する必要はありません. 条件が満たされたか否か、すなわちcur_sumが目標値targetに等しいかどうか、等しい場合はcur_を構成するsumの各加算cur_リストは結果リストresに追加されます. 現在およびcur_について考察するsumに現在の要素candidates[index,cur_sum+candidates[index],cur_list+[candidates[index])が入っている場合. 現在およびcur_について考察するsumに現在の要素が入っていない場合、すなわち現在の要素をスキップし、次の要素:helper(index+1,cur_sum,cur_list)を考察する.
遡及法の真髄はステップ3とステップ4にあり,可能なすべての組合せを遍歴することができる.遡及法の説明とその他のテーマについては、「遡及法総説」に移動してください.
注意:配列内の要素が重複していないため、ソートは使用できません.
質問やアドバイスがあれば、コメントエリアへようこそ~
タイトル
難易度:★☆☆タイプ:配列方法:遡及法
重複要素のない配列candidatesとターゲット数targetを指定し、candidatesのすべての数値とtargetの組合せを見つけます.
candidatesの数字は、無制限に繰り返し選択できます.
説明:
すべての数字(targetを含む)は正の整数です.解セットに重複する組合せを含めることはできません.
例1入力:candidates=[2,3,6,7],target=7,解セット:[[7],[2,2,3]]
例2入力:candidates=[2,3,5],target=8,解セット:[[2,2,2,2],[2,3,3],[3,5]]
に答える
シナリオ1:遡及法
私たちは遡及法を用いてこの問題を解決した.遡及法の思想は、適切でなければ、前のステップに戻ることだ.
遡及操作を実現するための関数helperを書きます.
入力パラメータ
操作フロー
遡及法の真髄はステップ3とステップ4にあり,可能なすべての組合せを遍歴することができる.遡及法の説明とその他のテーマについては、「遡及法総説」に移動してください.
注意:配列内の要素が重複していないため、ソートは使用できません.
class Solution:
def combinationSum(self, candidates, target):
"""
:param candidates: List[int]
:param target: int
:return:
"""
def helper(index, cur_sum, cur_list):
"""
:param i:
:param cur_sum:
:param cur_list: cur_sum
:return:
"""
#
if cur_sum > target or index == len(candidates):
return
# ,
if cur_sum == target:
res.append(cur_list)
return
# candidates[i]
helper(index, cur_sum + candidates[i], cur_list + [candidates[i]])
#
helper(index+1, cur_sum, cur_list)
candidates.sort()
res = []
helper(0, 0, [])
return res
質問やアドバイスがあれば、コメントエリアへようこそ~