class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int> > result;
if(num.size() < 3)
return result;
sort(num.begin(), num.end());
for(int i = 0; i < num.size()-2; ) {
int rec = num[i];
int j = i+1;
int k = num.size()-1;
while(j < k) {
int sum = num[i] + num[j] + num[k];
if(sum > 0)
k--;
else if(sum < 0)
j++;
else { // 注意去重
vector<int> tmp;
tmp.push_back(num[i]);
tmp.push_back(num[j]);
tmp.push_back(num[k]);
result.push_back(tmp);
int l = num[j], r = num[k];
j++, k--;
while(l == num[j])
j++;
while(r == num[k])
k--;
}
}
//注意num[i]的重
i++;
while(num[i] == rec)
i++;
}
}
}
题目不难,但要注意的是条件中说到的不能重复的问题。一开始错误就是在于没有判断num[i]的重复情况。
所以后来加上了后面的代码