D103 447. Number of Boomerangs
题目链接
题目分析
给定一个坐标数组,从中任意取3个坐标(i,j,k)
,使得从i到j的距离等于i到k的距离。且(i,j,k)
与(i,k,j)
不是同一个组合,需单独计算。
思路
逐个遍历,计算两点距离。并记录在一个数组中。
对于具有相同距离的边的个数,组合数量有以下规律:
当有2条边时,可以组合成2条;
当有3条边时,可以组合成6条;
当有4条边时,可以组合成12条;
当有n条边时,可以组合成n(n-1)条。
对于每一个起点都如此计算,将最后的和返回即可。
最终代码
<?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)资助。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。