Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2]
Personal tips: 将三数问题化为二数问题。代码如下:
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> indexs;
if (nums.size() < 3) return indexs;
sort(nums.begin(), nums.end());
if (nums[0] > 0) return indexs;
int i = 0;
while (i<nums.size()-2)
{
int temp = i + 1, j = nums.size() - 1;
while (temp<j)
{
if (nums[i] + nums[temp] + nums[j] == 0)
{
while (temp<j&&nums[temp]==nums[temp+1]) ++temp;
while (j>temp&&nums[j]==nums[j-1]) --j;
indexs.push_back({ nums[i],nums[temp++],nums[j--] });
}
else if (nums[i] + nums[temp] + nums[j] > 0) --j;
else ++temp;
}
while (i<nums.size() - 2 && nums[i] == nums[i + 1]) ++i;
++i;
}
return indexs;
}
};