class Solution { public: vector<vector<int> > threeSum(vector<int> &num) { sort(num.begin(), num.end()); vector<vector<int> > res; int n = num.size(); for (int l = 0; l < n - 2; ++l) { if (l > 0 && num[l] == num[l - 1]) { continue; } int target = -num[l]; for (int m = l + 1, r = n - 1; m < r; ) { if (m > l + 1 && num[m] == num[m - 1]) { ++m; continue; } if (r < n - 1 && num[r] == num[r + 1]) { --r; continue; } if (num[m] + num[r] < target) { ++m; } else if (num[m] + num[r] > target) { --r; } else { res.push_back({num[l], num[m], num[r]}); ++m; --r; } } } return res; } };
思路:三指针法。
先排序,然后三指针。
注意去重。