LeetCode: Combination Sum
2013-03-19 11:56
323 查看
第一次没考虑到要加个系数cur, 因为必须从小到大排序,导致答案里有[1, 2]和[2, 1],加入cur后就acm了
C#: C#有深浅拷贝的问题,这里浅拷贝的话最后的ans就一直是空。。。所以这里需要深拷贝出来。。。C++没有这个问题方便很多
View Code
class Solution { public: void dfs(vector<int> candidates, int target, int sum, vector<int> &save, vector<vector<int>> &ret, int cur) { if (sum > target) return; if (sum == target) { ret.push_back(save); return; } for (int i = cur; i < candidates.size(); i++) { save.push_back(candidates[i]); dfs(candidates, target, sum+candidates[i], save, ret, i); save.pop_back(); } } vector<vector<int> > combinationSum(vector<int> &candidates, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function sort(candidates.begin(), candidates.end()); int sum = 0; vector<vector<int>> ret; vector<int> save; if (candidates.size() == 0) return ret; int cur = 0; dfs(candidates, target, sum, save, ret, cur); return ret; } };
C#: C#有深浅拷贝的问题,这里浅拷贝的话最后的ans就一直是空。。。所以这里需要深拷贝出来。。。C++没有这个问题方便很多
public class Solution { public List<List<int>> CombinationSum(int[] candidates, int target) { Array.Sort(candidates); int sum = 0; List<List<int>> ans = new List<List<int>>(); List<int> tmp = new List<int>(); if (candidates.Length == 0) return ans; int dep = 0; dfs(candidates, target, sum, ref tmp, ref ans, dep); return ans; } void dfs(int[] candidates, int target, int sum, ref List<int> tmp, ref List<List<int>> ans, int dep) { if (sum > target) return; if (sum == target) { List<int> newTmp = new List<int>(); for (int i = 0; i < tmp.Count; i++) newTmp.Add(tmp[i]); ans.Add(newTmp); return; } for (int i = dep; i < candidates.Length; i++) { tmp.Add(candidates[i]); dfs(candidates, target, sum + candidates[i], ref tmp, ref ans, i); tmp.RemoveAt(tmp.Count - 1); } } }
View Code
相关文章推荐
- leetcode第38题--Combination Sum
- ***(leetcode_backtracking) Combination Sum
- LeetCode : Combination Sum [java]
- 回溯详解及其应用:Leetcode 39 combination sum
- 【LeetCode】C# 39、Combination Sum
- [LeetCode] Combination Sum
- Leetcode: Combination Sum
- Java [Leetcode 39]Combination Sum
- LeetCode 41: Combination Sum
- [Leetcode 52] 39 Combination Sum
- 深度优先搜索和回溯(实例LeetCode 39 Combination Sum)
- [leetcode javascript解题]Combination Sum
- 【Leetcode】【python】Combination Sum
- 【leetcode刷题笔记】Combination Sum
- Leetcode: Combination Sum
- Leetcode-39: Combination Sum
- 【Leetcode】【Medium】Combination Sum
- [LeetCode]039-Combination Sum
- Leetcode--Combination Sum
- <LeetCode OJ> 39 / 40 Combination Sum(I / II)