解题思路
和combination-sum类似,只不过元素不能重复使用,故用一个visit数组标记已经选用了的元素,避免重复选用。
代码
class Solution {
public:bool visit[10001];void dfs(vector<int>num,int target,vector<vector<int>> &res,vector<int> &cur){if(target == 0){vector<int>tmp;tmp.insert(tmp.end(),cur.begin(),cur.end());sort(tmp.begin(),tmp.end());if(find(res.begin(),res.end(),tmp) == res.end())res.push_back(tmp);}for(int i = 0;i < num.size();i++){if(target - num[i] >= 0 && visit[i] == false){visit[i] = true;cur.push_back(num[i]);dfs(num,target - num[i],res,cur);visit[i] = false;cur.pop_back();}}}vector<vector<int> > combinationSum2(vector<int> &num, int target) {vector<vector<int>>res;vector<int>cur;memset(visit,false,sizeof(visit));sort(num.begin(),num.end());dfs(num,target,res,cur);return res;}