vector<vector<int>> result;sort(nums.begin(), nums.end());for(int i =0; i != nums.size();++i){//if a > 0, c>=b>=a, can't get zero, no combination leftif(nums[i]>0)break;//combinations of a = nums[i-1] all found, prevent dup and i-1 is validif(i>0&& nums[i]== nums[i-1])continue;int left = i +1;int right = nums.size()-1;while(right > left){//ascending orderif(nums[i]+ nums [left]+ nums[right]>0) right--;elseif(nums[i]+ nums [left]+ nums[right]<0) left++;else{
result.push_back(vector<int>{nums[i], nums [left], nums[right]});// prevent dup like -1 1 1 0 0while(right > left && nums[left]== nums[left+1])++left;while(right > left && nums[right]== nums[right-1])--right;++left;--right;}}}return result;