public class Solution { public IList<IList<int>> ThreeSum(int[] nums) { Array.Sort(nums); int n = nums.Length; IList<IList<int>> ans = new List<IList<int>>(); for (int i = 0; i < n - 2 && nums[i] <= 0; ++i) { if (i > 0 && nums[i] == nums[i - 1]) { continue; } int j = i + 1, k = n - 1; while (j < k) { int x = nums[i] + nums[j] + nums[k]; if (x < 0) { ++j; } else if (x > 0) { --k; } else { ans.Add(new List<int> { nums[i], nums[j--], nums[k--] }); while (j < k && nums[j] == nums[j + 1]) { ++j; } while (j < k && nums[k] == nums[k + 1]) { --k; } } } } return ans; } }