这个题目有几点值得要提的。
第一,i++这个表达式的值时i并不是i+1,你在函数的时候不能瞎用。
第二,其实这个问题有点偏向于贪心算法,但是我们在贪心的时候可以适当的进行一定的剪枝这样会使得程序效率提高。
最后我们要去的是没有重复的,所以要进行一定的判断。
class Solution {
public:
vector<vector<int> > combinationSum2(vector<int> &num, int target)
{
sort(num.begin(),num.end());
int sum = 0;
int level = 0;
vector<int> Solution;
vector<vector<int>> answer;
if (num.size() == 0)
return answer;
combination(num,level,target,Solution,answer,sum);
return answer;
}
void combination(vector<int> &num,int level,int target,vector<int> &Solution,vector<vector<int>> &answer,int sum)
{
if(sum > target)
return ;
if(sum == target)
{
int flag = 0;
for(int i = 0;i< answer.size();i++)
if(answer[i]==Solution)
flag = 1;
if(flag == 0)
answer.push_back(Solution);
return;
}
if(sum < target)
{
for(int i = level;i < num.size();i++)
{
Solution.push_back(num[i]);
sum += num[i];
combination(num,i+1,target,Solution,answer,sum);//when in a function,i++ have a value of i differt with i+1
Solution.pop_back();
sum -= num[i];
}
}
}
};