作者:陳小勳2502936731 | 来源:互联网 | 2024-10-22 10:29
剑指 Offer II 081. 允许重复选择元素的组合
题目描述:
给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。
candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。
对于给定的输入,保证和为 target 的唯一组合数少于 150 个。
示例 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]]
示例 3:
输入: candidates = [2], target = 1
输出: []
示例 4:
输入: candidates = [1], target = 1
输出: [[1]]
示例 5:
输入: candidates = [1], target = 2
输出: [[1,1]]
提示:
1 <&#61; candidates.length <&#61; 30
1 <&#61; candidates[i] <&#61; 200
candidate 中的每个元素都是独一无二的。
1 <&#61; target <&#61; 500
来源&#xff1a;力扣&#xff08;LeetCode&#xff09;
链接&#xff1a;https://leetcode-cn.com/problems/Ygoe9J
著作权归领扣网络所有。商业转载请联系官方授权&#xff0c;非商业转载请注明出处。
AC代码&#xff1a;
class Solution(object):def combinationSum(self, candidates, target):""":type candidates: List[int]:type target: int:rtype: List[List[int]]"""ans &#61; []candidates.sort()n &#61; len(candidates)res &#61; []def f(index, res):if sum(res) > target:returnif sum(res) &#61;&#61; target:ans.append(res[:])returnfor i in range(index, n):if sum(res) &#43; candidates[i] > target:breakres.append(candidates[i])f(i, res)res.pop()f(0, res)return ans
candidates &#61; [2, 7, 6, 3, 5, 1]
target &#61; 9
ans &#61; Solution().combinationSum(candidates, target)
print(ans)