package main
import "fmt"
func calculate(nums []int) [][]int {
//[-1, 0, 1, 2, -1, -4]
var big_res [][]int
for i := 0; i < 2; i++ {
for j := i + 1; j < len(nums); j++ {
for k := i + 2; k < len(nums); k++ {
sum := nums[i] + nums[j] + nums[k]
if sum == 0 {
var res []int
res = append(res, nums[i], nums[j], nums[k])
big_res = append(big_res, res)
}
}
}
}
return big_res
}
func main() {
//给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?
//找出所有满足条件且不重复的三元组。
//注意:答案中不可以包含重复的三元组。
//示例:
//给定数组 nums = [-1, 0, 1, 2, -1, -4],
//满足要求的三元组集合为:
//[
//[-1, 0, 1],
//[-1, -1, 2]
//]
nums := []int{-1, 0, 1, 2, -1, -4}
res := calculate(nums)
//fmt.Println(res) //[[-1 0 1] [-1 2 -1] [-1 -1 2] [0 1 -1]]
//先排序,冒泡排序
for i := 0; i < len(res); i++ {
for j := 1; j < len(res[i]); j++ {
for k := 0; k < len(res[i])-j; k++ {
if res[i][k] > res[i][k+1] {
res[i][k+1], res[i][k] = res[i][k], res[i][k+1]
}
}
}
}
//fmt.Println(res) //[[-1 0 1] [-1 -1 2] [-1 -1 2] [-1 0 1]]
//把里面的切片变成数组
var splice [][3]int
for i := 0; i < len(res); i++ {
//fmt.Printf("%T\n", res[i])
var arr [3]int
for j := 0; j < len(res[i]); j++ {
//var arr [3]int
arr[j] = res[i][j]
}
splice = append(splice, arr)
//fmt.Println(splice)
}
//去重
fmt.Println(splice) //[[-1 0 1] [-1 -1 2] [-1 -1 2] [-1 0 1]]
var s2 [][3]int
for i := 0; i < len(splice)-1; i++ {
//var arr2 [3]int
for j := i+1; j < len(splice); j++ {
if splice[i] == splice[j]{
s2 = append(s2, splice[i])
}
}
}
fmt.Println(s2) //[[-1 0 1] [-1 -1 2]]
}
原文:https://www.cnblogs.com/yzg-14/p/12299609.html