int size = nums.size(); vector<vector<int>> res; int usedi = 0; int usedj = 0; bool flag = true;//有三个以上的0时,只加入一次 for (int i = 0; i < size - 2; ++i) { int j = i + 1; int k = size - 1;
while (j < k) { int t = nums[i] + nums[j] + nums[k]; if (t == 0) { vector<int> y; y.push_back(nums[i]); y.push_back(nums[j]); y.push_back(nums[k]); res.push_back(y); while (j < size - 2 && nums[j] == nums[j + 1]) ++j; while (k > 0 && nums[k] == nums[k - 1]) --k; ++j; --k; continue; } elseif (t > 0) --k; else ++j; } usedi = nums[i]; while (i < size - 3 && usedi == nums[i + 1]) ++i;//与前面重复的数字就不要再向后搜索 } return res; }