标签:
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0.
A solution set is:
(-1, 0, 0, 1)
(-2, -1, 1, 2)
(-2, 0, 0, 2)
类似于15题求解的
其实求解
因此,采用递归的思想解决
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> vv = KSum(nums, target, 4);
int len = vv.size();
for (int i = 0; i < len; i++)
sort(vv[i].begin(), vv[i].end());
return vv;
}
vector<vector<int>> KSum(vector<int> &nums, int target, int k)
{
vector<vector<int>> vv;
int len = nums.size();
if (len < k)
return vv;
sort(nums.begin() , nums.end());
if (k == 1)
{
for (int i = 0; i < len; i++)
{
vector<int> v;
if (nums[i] == target)
{
v.push_back(nums[i]);
vv.push_back(v);
}
while (((i + 1) < len) && (nums[i + 1] == nums[i]))
{
i++;
}
}//for
}//if
else
{
vector<int>::iterator iter = nums.begin();
for (int i = 0; i < nums.size(); i++)
{
iter++;
int j = 0;
vector<int > _nums(iter, nums.end());
vector<vector<int>> _vv = KSum(_nums, target - nums[i], k - 1);
int _len = _vv.size();
if (_len <= 0)
continue;
for (int j = 0; j < _len; j++)
{
_vv[j].push_back(nums[i]);
vv.push_back(_vv[j]);
}//for
while (((i + 1) < len) && (nums[i + 1] == nums[i]))
{
i++;
iter++;
}
}//for
}//else
return vv;
}
};
标签:
原文地址:http://blog.csdn.net/fly_yr/article/details/47360849