3层循环,剪枝,数据小
class Solution {
public:vector<vector<int> > threeSum(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > ans;
vector<int> ret;
if(num.size()==0)
return ans;
sort(num.begin(),num.end());
int pri1 = num[0]-1,pri2,pri3;
for(int i=0;i<num.size();i++){
if(num[i]==pri1)
continue;
pri1 = num[i];
if(pri1>0)
break;
pri2 = pri1-1;
for(int j=i+1;j<num.size();j++){
if(num[j]==pri2)
continue;
pri2 = num[j];
if(pri1+pri2>0)
break;
pri3 = pri2-1;
for(int k = j+1;k<num.size();k++){
if(num[k]==pri3)
continue;
pri3 = num[k];
if(pri1+pri2+pri3==0){
ret.clear();
ret.push_back(pri1);
ret.push_back(pri2);
ret.push_back(pri3);
ans.push_back(ret);
}
if(pri1+pri2+pri3>0)
break;
}
}
}
return ans;
}
};