枚舉+哈希表
//447 回旋鏢的數(shù)量
排列數(shù)問題,三個(gè)點(diǎn)構(gòu)成回旋鏢,全局來說,只需要得到相同距離的有幾個(gè),即可進(jìn)行處理了。
?public int numberOfBoomerangs(int[][] points) { ? ? ? ?int ans = 0; ? ? ? ?for (int[] p : points) { ? ? ? ? ? ?Mapcnt = new HashMap(); ? ? ? ? ? ?for (int[] q : points) { ? ? ? ? ? ? ? ?int dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]); //處理距離 其實(shí)不用在意點(diǎn)的位置 只需要得出【距離】這個(gè)信息即可 ? ? ? ? ? ? ? ?cnt.put(dis, cnt.getOrDefault(dis, 0) + 1); //封裝進(jìn)map中 ? ? ? ? ? ?} ? ? ? ? ? ?for (Map.Entryentry : cnt.entrySet()) { ? ? ? ? ? ? ? ?int m = entry.getValue(); ? ? ? ? ? ? ? ?ans += m * (m - 1);//排列數(shù) Am2 從m個(gè)數(shù)中取出兩個(gè)數(shù) ? ? ? ? ? ?} ? ? ? ?} ? ? ? ?return ans; ? ?}
標(biāo)簽: