思路
本题就是在3Sum的外面再套上一个循环即可。
代码
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
int subtarget, sum;
vector<vector<int>> rs;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); ++i) {
subtarget = target - nums[i];
for (int j = i+1; j < nums.size(); ++j) {
int left = j + 1, right = nums.size() - 1;
while (left < right) {
sum = nums[j] + nums[left] + nums[right];
if (sum < subtarget) ++left;
else if (sum > subtarget) --right;
else {
rs.emplace_back(vector<int>{nums[i], nums[j], nums[left], nums[right]});
while (left < right && nums[left + 1] == nums[left]) ++left;
while (left < right && nums[right -1] == nums[right]) --right;
++left;
--right;
}
}
while (j + 1 < nums.size() && nums[j+1] == nums[j]) ++j;
}
while (i + 1 < nums.size() && nums[i+1] == nums[i]) ++i;
}
return rs;
}
};