给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
注意事项
在三元组(a, b, c),要求a <= b <= c。
结果不能包含重复的三元组。
您在真实的面试中是否遇到过这个题?
Yes
样例
如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:
(-1, 0, 1)
(-1, -1, 2)
class Solution {
public:
/**
* @param numbers : Give an array numbers of n integer
* @return : Find all unique triplets in the array which gives the sum of zero.
*/
vector<vector<int> > threeSum(vector<int> &nums) {
// write your code here
vector<vector<int> > res_vector;
sort(nums.begin(),nums.end());
int len=nums.size();
for(int i=0;i<len-2;i++){
for(int j=i+1;j<len-1;j++){
for(int z=j+1;z<len;z++){
if((nums[i]+nums[j]+nums[z])==0){
vector<int> res;
res.push_back(nums[i]);
res.push_back(nums[j]);
res.push_back(nums[z]);
//res_vector.push_back(res);
auto it=find(res_vector.begin(),res_vector.end(),res);
if(it==res_vector.end()){
//没有find 到
res_vector.push_back(res);
}
}
}
}
}
return res_vector;
}
};