1. 程式人生 > >Leetcode PHP題解--D103 447. Number of Boomerangs

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

D103 447. Number of Boomerangs

題目連結

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;
    }
}

若覺得本文章對你有用,歡迎用