LeetCode 题解(174): Combination Sum
来源:互联网 发布:gitlab ci 部署php 编辑:程序博客网 时间:2024/04/30 08:19
题目:
Given a set of candidate numbers (C) and a target number (T), find all unique combinations inC where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
- All numbers (including target) will be positive integers.
- Elements in a combination (a1, a2, … ,ak) must be in non-descending order. (ie, a1 ≤a2 ≤ … ≤ ak).
- The solution set must not contain duplicate combinations.
2,3,6,7
and target 7
, A solution set is:
[7]
[2, 2, 3]
题解:
排序后Backtracking。
C++版:
class Solution {public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<vector<int>> results; sort(candidates.begin(), candidates.end()); for(int i = 0; i < candidates.size(); i++) { vector<int> result; result.push_back(candidates[i]); combination(candidates, results, result, target - candidates[i], i); result.pop_back(); } return results; } void combination(vector<int>& candidates, vector<vector<int>>& results, vector<int>& result, int target, int i) { if(target < 0) return; if(target == 0) { results.push_back(result); return; } for(int j = i; j < candidates.size(); j++) { result.push_back(candidates[j]); combination(candidates, results, result, target - candidates[j], j); result.pop_back(); } }};
Java版:
public class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { Arrays.sort(candidates); List<List<Integer>> results = new ArrayList<List<Integer>>(); for(int i = 0; i < candidates.length; i++) { List<Integer> result = new ArrayList<>(); result.add(candidates[i]); combination(candidates, results, result, target - candidates[i], i); result.remove(result.size() - 1); } return results; } public void combination(int[] candidates, List<List<Integer>> results, List<Integer> result, int target, int i) { if(target < 0) return; if(target == 0) { List<Integer> temp = new ArrayList<>(); temp.addAll(result); results.add(temp); } for(int j = i; j < candidates.length; j++) { result.add(candidates[j]); combination(candidates, results, result, target - candidates[j], j); result.remove(result.size() - 1); } }}
Python版:
import copyclass Solution: # @param {integer[]} candidates # @param {integer} target # @return {integer[][]} def combinationSum(self, candidates, target): results, result = [], [] candidates.sort() for i in range(len(candidates)): result.append(candidates[i]) self.combination(candidates, results, result, target - candidates[i], i) result.pop() return results def combination(self, candidates, results, result, target, i): if target < 0: return if target == 0: temp = copy.copy(result) results.append(temp) for j in range(i, len(candidates)): result.append(candidates[j]) self.combination(candidates, results, result, target - candidates[j], j) result.pop()
0 0
- LeetCode 题解(174): Combination Sum
- LeetCode 39. Combination Sum 题解
- leetcode题解-39. Combination Sum
- Leetcode题解-39. Combination Sum
- leetcode题解-40. Combination Sum II && 216. Combination Sum III
- LeetCode题解:Combination Sum I and II
- LeetCode 题解(119): Combination Sum III
- LeetCode 题解(175): Combination Sum II
- LeetCode题解——Combination Sum
- LeetCode题解——Combination Sum II
- LeetCode题解——Combination Sum III
- 【回溯】【leetcode题解】【M】【57】Combination Sum
- Combination Sum题解
- Combination Sum II 题解
- Combination Sum III 题解
- Combination Sum 题解
- Leetcode题解(4):L216/Combination Sum III
- Lintcode135 Combination Sum solution 题解
- POJ 1061 青蛙的约会【拓展欧几里得】
- Apache+Weblogic
- 黑马程序员——Java基础语法(一)---关键字、常量、变量、运算符
- 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
- 深度学习参考资料
- LeetCode 题解(174): Combination Sum
- 【Leetcode】PlusOne #66
- S3C2440 开发环境搭建(Ubuntu)
- LeetCode 题解(175): Combination Sum II
- 黑马程序员--异常
- 面向对象(static静态应用)-第13天
- 【Leetcode】Longest Common Prefix #14
- C++ Windows对象和MFC对象的区别
- Matlab多维数组按照第一行从小到大进行列排序