文章目录
更多LeetCode题解
My Solution
在3Sum的基础上加一层循环
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
if (nums.size() < 4) { return {}; }
sort(nums.begin(), nums.end());
vector<vector<int>> res;
for (int i = 0; i < nums.size() - 3; i++) {
if (i > 0 && nums[i] == nums[i - 1]) { continue; }
int target_3sum = target - nums[i];
for (int j = i + 1; j < nums.size() - 2; j++) {
if (j > i + 1 && nums[j] == nums[j - 1]) { continue; }
int target_2sum = target_3sum - nums[j];
int k = j + 1, l = nums.size() - 1;
while (k < l) {
int sum = nums[k] + nums[l];
if (sum < target_2sum)
{
k++;
}
else if (sum > target_2sum) {
l--;
}
else {
res.push_back({ nums[i],nums[j],nums[k],nums[l] });
k++; l--;
while (k < l && nums[k] == nums[k - 1]) { k++; }
while (k < l && nums[l] == nums[l + 1]) { l--; }
}
}
}
}
return res;
}
};