leetcode(리트코드)39-Combination Sum
leetcode(리트코드)39-Combination Sum
leetcode 39 - Combination Sum 문제입니다.
1. 문제
https://leetcode.com/problems/combination-sum/
2. Input , Output
Constraints:
- 1 <= candidates.length <= 30
- 1 <= candidates[i] <= 200
- All elements of candidates are distinct.
- 1 <= target <= 500
3. 분류 및 난이도
Medium 난이도 문제입니다.
leetcode Top 100 Liked의 문제입니다.
4. 문제 해석
- 후보자로 주어진 벡터에서 target을 만들 수 있는 경우의 수를 벡터에 넣어 리턴합니다.
5. code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public:
vector<vector<int>> result;
void practice(vector<int>& candidates, int target,vector<int> temp,int num)
{
if(target==0)
{
result.push_back(temp);
}
else if(target<0)
{
return;
}
else
{
for( ;num<candidates.size();++num)
{
temp.push_back(candidates[num]);
practice(candidates,target-candidates[num],temp,num);
temp.pop_back();
}
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<int> temp;
practice(candidates,target,temp,0);
return result;
}
};
6. 결과 및 후기, 개선점
시간 40ms(30%)
이해가 안되는 점은 4ms 97% 코드와 똑같은데 40ms 나온 것.. 트래픽이 몰렸나..?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<int> temp;
vector<vector<int>> result;
solve(candidates, 0, target, temp, result);
return result;
}
void solve(vector<int>& candidates, int start, int target, vector<int> &temp, vector<vector<int>>&result) {
if(target < 0) {
return;
}
else if(target == 0) {
result.push_back(temp);
}
for(int i=start ; i< candidates.size() ; i++) {
temp.push_back(candidates[i]);
solve(candidates, i, target-candidates[i], temp, result);
temp.pop_back();
}
}
};
This post is licensed under CC BY 4.0 by the author.