39.組み合わせの合計

给定一个无重复元素的数组 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 <= candidates.length <= 30
  • 1 <= candidates[i] <= 200
  • candidate の各要素は一意です。
  • 1 <= target <= 500

再帰

最初に候補を並べ替え、次に数値を毎回ansに入れて、残りを再帰的に検索します。

コード

	def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
		def find(start, use, remain):
			for index, value in enumerate(candidates[start:]):
				if value == remain:
					ans.append(use + [value])
				elif value < remain:
					find(start + index, use + [value], remain - value)
				else:
					return

		ans = []
		candidates.sort()
		find(0, [], target)
		return ans

おすすめ

転載: blog.csdn.net/weixin_43336281/article/details/108482213