leetcode_447

淳属虚构 · · 1167 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang:

前言:在我看来,这还真不算是道简单题,想想虽然是可以想明白的,但实现起来还是有点复杂的。但是这超过百分之五十的通过率是什么,难道这题只是单方面对我不友好吗?

思路:以i点为起点,找到所有到达i点距离一样的点,然后用数学方法得出排列方式,加入到sum中。

实现:使用一个二维数组记录所有点到点之间的距离,然后从第一个点开始一个for循环,每次循环过程中将这个点到其他所有点的距离值存进一个map中,这样我们就能得到一个以i点到其他点距离为key的map,value是距离i点为key的所有点的数目。然后遍历这个map,凡是value大于2的,即至少有两个点到i点距离一样的,都用数学方法得到排列的数目,然后更新sum,这一套流程完成后,再继续下一个点

代码如下:

func numberOfBoomerangs(points [][]int) int {
    if len(points)<3 {
        return 0
    }
    matrix:=make([][]int,len(points))
    for i:=0;i<len(points);i++ {
        matrix[i]=make([]int,len(points))
    }
    for i:=0; i<len(points)-1; i++ {
        for j:=i+1;j<len(points);j++{
            matrix[i][j]=(points[i][0]-points[j][0])*(points[i][0]-points[j][0])+(points[i][1]-points[j][1])*(points[i][1]-points[j][1])
            matrix[j][i]=matrix[i][j]
        }
    }
    sum:=0
    for i:=0; i< len(matrix); i++ {
        tempMap:=make(map[int]int)
        for j:=0; j<len(matrix); j++ {
            if matrix[i][j]!=0 {
                tempMap[matrix[i][j]]++
            }
        }
        for _,v:=range tempMap{
            println(v)
            if v>=2 {
                sum=sum+v*(v-1)
            }
        }
    }
    return sum
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:淳属虚构

查看原文:leetcode_447

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1167 次点击  
加入收藏 微博
上一篇:leetcode_453
下一篇:leetcode_409
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传