给定一个坐标数组,从中任意取3个坐标(i,j,k)
,使得从i到j的距离等于i到k的距离。且(i,j,k)
与(i,k,j)
不是同一个组合,需单独计算。数组
逐个遍历,计算两点距离。并记录在一个数组中。.net
对于具备相同距离的边的个数,组合数量有如下规律:code
当有2条边时,能够组合成2条;
当有3条边时,能够组合成6条;
当有4条边时,能够组合成12条;
当有n条边时,能够组合成n(n-1)条。leetcode
对于每个起点都如此计算,将最后的和返回便可。get
<?php class Solution { /** * @param Integer[][] $points * @return Integer */ function numberOfBoomerangs($points) { $c = 0; $totalPoints = count($points); for($i = 0; $i<$totalPoints; $i++){ $distances = []; $iv = $points[$i]; for($j = 0; $j<$totalPoints; $j++){ if($i == $j){ continue; } $jv = $points[$j]; $ij = pow($iv[0]-$jv[0],2) + pow($iv[1]-$jv[1],2); if(!isset($distances[$ij])){ $distances[$ij] = 0; } $distances[$ij]++; } foreach($distances as $v){ $c += $v*$v-$v; } } return $c; } }
若以为本文章对你有用,欢迎用[爱发电](https://afdian.net/@skys215)资助。