Leetcode PHP題解--D103 447. Number of Boomerangs
阿新 • • 發佈:2019-07-14
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; } }