Leetcode PHP題解--D103 447. Number of Boomerangs

D103 447. Number of Boomerangs

題目連接

447. Number of Boomerangsphp

題目分析

給定一個座標數組,從中任意取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)資助。
相關文章
相關標籤/搜索