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
}
有疑问加站长微信联系(非本文作者)