跟求3sum差不多
class Solution {
public:
vector<vector<int> > fourSum(vector<int> &num, int target) {
vector<vector<int> > result;
sort(num.begin(), num.end());
for(int i = num.size() - 1; i > 2; i--) {
if(i == num.size() - 1 || num[i] != num[i + 1]) {
vector<vector<int> > tmp = threeSum(num, i - 1, target - num[i]);
for(int k = 0; k < tmp.size(); k++) {
tmp[k].push_back(num[i]);
result.push_back(tmp[k]);
}
}
}
return result;
}
private:
vector<vector<int> > threeSum(vector<int> &num, int end, int target) {
int pre = -1;
vector<vector<int> > result;
for(int i = 0; i <= end; i++) {
int temp = num[i];
if(pre != -1 && num[pre] == num[i]) {
continue;
}
pre = i;
int low = i + 1, high = end;
int val = target - num[i];
while(low < high) {
int t = num[low] + num[high];
if(t == val) {
vector<int> tmp;
tmp.push_back(num[i]);
tmp.push_back(num[low]);
tmp.push_back(num[high]);
result.push_back(tmp);
low++;
high--;
while(low < high && num[low] == num[low - 1]) {
low++;
}
while(low < high && num[high] == num[high + 1]) {
high--;
}
} else if(t < val) {
low++;
} else {
high--;
}
}
}
return result;
}
};