13 {
14 vector<vector<int>> result;
15 sort(nums.begin(), nums.end());
16 int length = nums.size();
17 for (int i = 0; i < length; ++i)
18 {
19
20 if (i > 0 && nums[i] == nums[i - 1])
21 continue;
22
23 int target = -nums[i];
24 int left = i + 1;
25 int right = length - 1;
26
27 while (left < right)
28 {
29 int sum = nums[left] + nums[right];
30 if (sum == target)
31 {
32 result.push_back({nums[i], nums[left], nums[right]});
33
34
35 while (left < right && nums[left] == nums[left + 1])
36 ++left;
37
38
39 while (left < right && nums[right] == nums[right - 1])
40 --right;
41
42 ++left;
43 --right;
44 }
45 else if (sum < target)
46 ++left;
47 else
48 --right;
49 }
50 }
51 return result;
52 }