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] ]
- 这个问题,很容易让人想到对把数组进行从小到大的排序之后在处理。
- 也很容易想到把三个数求和分解为两个数求和的过程。
- *** 这个问题还有一个关键点,就是通过一次数组便利就可以确定和为固定值的数对
vector<vector<int> > threeSum(vector<int>& nums) {
vector<vector<int>> result;
int s, e, t;
if (nums.size() > 3) {
sort(nums.begin(), nums.end());
}
else {
return result;
}
for (int i = 0; i < nums.size() - 2; i++) {
if (i > 0 && nums[i] == nums[i - 1]) { continue; }
s = i + 1;
e = nums.size() - 1;
while (s < e) {
t = nums[i] + nums[s] + nums[e];
if (t > 0) { e--; continue; }
else if (t < 0) { s++; continue; }
else {
vector<int> o;
o.push_back(nums[i]);
o.push_back(nums[s]);
o.push_back(nums[e]);
result.push_back(o);
s++; e--;
}
while (s < e && nums[s] == nums[s - 1]) { s++; }
while (s < e && nums[e] == nums[e + 1]) { e--; }
}
}
return result;
}