解题思路:
- 将a + b + c = 0 转化成 -a = b + c 来解决;
- 注意去重;
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums)
{
//排序
sort(nums.begin(), nums.end());
//返回值是vector
vector<vector<int>> ans;
for(int i = 0; i < nums.size(); ++i)
{
if(i == 0 || i > 0 && nums[i] != nums[i - 1]) //去重
{
int j = i + 1;
int k = nums.size() - 1;
while(j < k)
{
if(nums[j] + nums[k] > -nums[i])
--k;
else if(nums[j] + nums[k] < -nums[i])
++j;
else
{
ans.push_back(vector<int>{nums[i], nums[j], nums[k]});
++j;
--k;
while(j < k && nums[j] == nums[j - 1]) //去重
++j;
while(j < k && nums[k] == nums[k + 1]) //去重
--k;
}
}
}
}
return ans;
}
};