classSolution: defthreeSum(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ # 4 star nums.sort() rs = set() for i in range(len(nums)-2): if i == 0or nums[i] > nums[i-1]: # 排除重复的数字 left = i + 1 right = len(nums) - 1 while left < right: total = nums[i] + nums[left] + nums[right] if total < 0: left += 1 elif total > 0: right -= 1 else: rs.add((nums[i], nums[left], nums[right])) left += 1 return list(rs)
functhreeSum(nums []int) [][]int { var ret [][]int sort.Ints(nums) length := len(nums) for index, _ := range nums { if index == 0 || nums[index] > nums[index-1] { //去除重复 left, right := index+1, length - 1 for left < right { cur_sum := nums[index] + nums[left] + nums[right] if cur_sum > 0 { right -= 1// 这几处的去除错误很巧妙,起初写错了很多次 for left <= right && nums[right] == nums[right+1] {right -= 1} // 去重 } elseif cur_sum < 0 { left += 1 for left <= right && nums[left] == nums[left-1] {left += 1} // 去重 } else { ret = append(ret, []int {nums[index], nums[left], nums[right]}) left += 1 for left <= right && nums[left] == nums[left-1] { // 去重 left += 1}