题目描述
给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。
注意:
- 三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
- 解集中不能包含重复的三元组。
例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, 0, 10) (-10, -10, 20)
示例1
输入
复制
[-2,0,1,1,2]
返回值
复制
[[-2,0,2],[-2,1,1]]
二、暴力法解法
#include<set>
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
//暴力搜索
sort(num.begin(),num.end());//保证三元组按非降序排序
//vector<vector<int> > res;
vector<vector<int> > ans;
set<vector<int> > res;
int l = num.size();
for(int i=0;i<l-2;i++){
for(int j=i+1;j<l-1;j++){
for(int k=j+1;k<l;k++){
vector<int> temp;
if(num[i]+num[j]+num[k] == 0){
temp.push_back(num[i]);
temp.push_back(num[j]);
temp.push_back(num[k]);
res.insert(temp);//使用集合去重
}
}
}
}
//遍历集合中的元素,再添加到vector变量中
set<vector<int> >::iterator iter = res.begin() ;
for( ;iter != res.end();iter++){
ans.push_back(*iter);
}
return ans;
}
};