读题心路历程:这道题,和三数之和是差不多的,无非就是多了一个for循环而已。
具体代码:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
if (nums.size() < 4) { return {}; }
if (nums[0]>= 1000000000&&nums[nums.size()-1]>= 1000000000) return {};
vector<vector<int>> result;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size() - 3; i++)
{
if (i > 0 && nums[i] == nums[i - 1]) { continue; }
for (int left = i + 1; left < nums.size() - 2; left++)
{
if (left > i + 1 && nums[left] == nums[left - 1]) { continue; }
int middle = left + 1;
int right = nums.size() - 1;
while (middle < right)
{
if (nums[i] + nums[left] > target - nums[middle] - nums[right]){ right--; }
else if (nums[i] + nums[left] < target-nums[middle] - nums[right]){ middle++; }
else
{
result.push_back({ nums[i] , nums[left] , nums[middle] , nums[right] });
while (middle < right && nums[right] == nums[right - 1]) { right--; }
while (middle < right && nums[middle] == nums[middle + 1]) { middle++; }
middle++;
right--;
}
}
}
}
return result;
}
这道题的整型溢出问题是真的烦,官方的例子加上看了好多人的题解,感觉这里的整型溢出完全是面向特例编程了。