三数之和问题可以通过转化,转成两数之和进行解答,具体代码如下:
func threeSum(nums []int) [][]int {
var three [][]int
sort.Ints(nums)
for i:=0;i<len(nums);i++{
var ss[][]int
ss=twoSum(nums,i+1,0-nums[i])
for j:=0;j<len(ss);j++{
ss[j]=append(ss[j],nums[i])
if len(ss[j])==3{
sort.Ints(ss[j])
three=append(three,ss[j])
}
}
for i<len(nums)-1&&nums[i]==nums[i+1]{
i++
}
}
return three
}
func twoSum(nums []int, start ,target int) [][]int {
sort.Ints(nums)
var slice [][]int
left:=start
right:=len(nums)-1
for left<right{
sum:=nums[left]+nums[right]
lo,hi:=nums[left],nums[right]
if sum==target{
var ss[]int
ss=append(ss,nums[left])
ss=append(ss,nums[right])
slice=append(slice,ss)
for left<right&&nums[left]==lo{
left++
}
for left<right&&nums[right]==hi{
right--
}
}else if sum>target{
for left<right&&nums[right]==hi{
right--
}
}else if sum<target{
for left<right&&nums[left]==lo{
left++
}
}
}
return slice
}