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 ", 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]] }