#include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型vector * @return int整型vector<vector<>> */ vector<vector<int> > threeSum(vector<int>& num) { // write code here // 方法一:三重遍历 // 方法二:排序+双指针 sort(num.begin(),num.end()); vector<vector<int>> ans; if(num.size()<3) return ans; // 避免重复 set<vector<int>> s_v; for(int i=0; i< num.size(); ++i) { int target = -num[i]; int l=i+1, r=num.size()-1; while(l<r) { if(num[l]+num[r]==target) { vector<int> v = {num[i],num[l],num[r]}; if(s_v.empty() || s_v.count(v)==0) { ans.emplace_back(v); s_v.emplace(v); } // 这里不要 break,因为可能对于相同的target,有多个不同的答案 ++l; --r; } else if(num[l]+num[r]<target) ++l; else --r; } } return ans; } };