leetcode40. 组合总和 II

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/artisans/article/details/88831922
class Solution {
public:
	vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
	    
		vector<int> flags(candidates.size(), 0);

		dfs(candidates, flags, 0, target);

		return _ret;
	}

	void dfs(vector<int>& candidates, vector<int>& flags, int index, int target)
	{
		int sum = 0;

		for (int i = 0; i < candidates.size(); i++)
		{
			sum += flags[i] * candidates[i];
		}

		if (sum == target)
		{
			vector<int> TMP;
			for (int i = 0; i < candidates.size(); i++)
			{
				if(flags[i])
				{
					TMP.push_back(candidates[i]);
					//cout << candidates[i] << "\t";
				}				
			}

			sort(TMP.begin(), TMP.end());

			if (_set.find(TMP) == _set.end())
			{
				_set.insert(TMP);
				_ret.push_back(TMP);
			}
			//cout << "\n";
		}
		else if(sum > target)
		{
			return;
		}
		else
		{
			for (int i = index; i < candidates.size(); i++)
			{
				flags[i] = 1;
				
				dfs(candidates, flags, i + 1, target);
				
				flags[i] = 0;
			}
		}
	}

	vector<vector<int>> _ret;
	set<vector<int>> _set;
};

猜你喜欢

转载自blog.csdn.net/artisans/article/details/88831922