首页 > 其他 > 详细

三数之和

时间:2020-02-12 17:24:03      阅读:73      评论:0      收藏:0      [点我收藏+]
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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!