給定整數陣列 S,找出所有不重複三元組 a,b,c 使 a+b+c=0。三元組需非遞減序,結果無重複。
例:S = [-1,0,1,2,-1,-4] → [[-1,0,1], [-1,-1,2]]。
current(current < len-2 && nums[current] <= 0)。front, back 夾逼求和。do-while 跳過相同值。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> res;
int len = nums.size();
for (int cur = 0; cur < len - 2 && nums[cur] <= 0; ++cur) {
int front = cur + 1, back = len - 1;
while (front < back) {
int sum = nums[cur] + nums[front] + nums[back];
if (sum < 0) ++front;
else if (sum > 0) --back;
else {
res.push_back({nums[cur], nums[front], nums[back]});
do ++front; while (front < back && nums[front-1] == nums[front]);
do --back; while (front < back && nums[back+1] == nums[back]);
}
}
while (cur < len - 2 && nums[cur+1] == nums[cur]) ++cur;
}
return res;
}
};