给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] :
- 0 <= a, b, c, d < n
- a、b、c 和 d 互不相同
- nums[a] + nums[b] + nums[c] + nums[d] == target
- 你可以按 任意顺序 返回答案 。
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
vector<vector<int>> res;
int64_t a=0,b=0,c=0,d=0;
uint64_t lastd=10*10*10*10*10*10*10*10*10+1;
uint64_t lastc=10*10*10*10*10*10*10*10*10+1;
uint64_t lastb=10*10*10*10*10*10*10*10*10+1;
uint64_t lasta=10*10*10*10*10*10*10*10*10+1;
for(int i=0;i<nums.size();i++)
{
if(lasta==nums[i])
{
lasta=10*10*10*10*10*10*10*10*10+1;
continue;
}
lasta=nums[i];
a=nums[i];
for(int j=i+1;j<nums.size();j++)
{
if(lastb==nums[j])
{
continue;
}
lastb=nums[j];
b=nums[j];
for(int k=j+1;k<nums.size();k++)
{
if(lastc==nums[k])
{
continue;
}
lastc=nums[k];
c=nums[k];
for(int l=k+1;l<nums.size();l++)
{
if(lastd==nums[l])
{
continue;
}
lastd=nums[l];
d=nums[l];
if((a+b+c+d) == target)
{
vector<int>temp;
temp.push_back(a);
temp.push_back(b);
temp.push_back(c);
temp.push_back(d);
cout<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;
res.push_back(temp);
}
}
lastd=10*10*10*10*10*10*10*10*10+1;
}
lastc=10*10*10*10*10*10*10*10*10+1;
}
lastb=10*10*10*10*10*10*10*10*10+1;
}
sort(res.begin(),res.end());
res.erase(unique(res.begin(),res.end()),res.end());
return res;
}
};