Skip to content

Commit 5b94bbc

Browse files
committedMay 3, 2021
feat: add solutions to leetcode problem: No.0447. Number of Boomerangs
1 parent efe90c9 commit 5b94bbc

File tree

5 files changed

+131
-6
lines changed

5 files changed

+131
-6
lines changed
 

‎solution/0300-0399/0356.Line Reflection/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747

4848
先找出所有点中的最小、最大的 x 坐标 `minX``maxX`。若存在满足条件的直线,则直线 `x = (minX + maxX) / 2`。(或者说:`s = minX + maxX`)
4949

50-
遍历每个点 `point(x, y)`,若 (s - x, y) 不在点集里,说明不满足条件,直接返回 false。遍历结束返回 true。
50+
遍历每个点 `point(x, y)`,若 `(s - x, y)` 不在点集里,说明不满足条件,直接返回 false。遍历结束返回 true。
5151

5252
<!-- tabs:start -->
5353

‎solution/0400-0499/0447.Number of Boomerangs/README.md

+46-3
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,70 @@
4545
<li>所有点都 <strong>互不相同</strong></li>
4646
</ul>
4747

48-
4948
## 解法
5049

5150
<!-- 这里可写通用的实现逻辑 -->
5251

52+
计数器实现。
53+
54+
对于每个点,计算其他点到该点的距离,然后按照距离进行分组计数。对每个组中的点进行两两排列组合(A n 取 2,即 `n * (n - 1))`)计数即可。
55+
5356
<!-- tabs:start -->
5457

5558
### **Python3**
5659

5760
<!-- 这里可写当前语言的特殊实现逻辑 -->
5861

5962
```python
60-
63+
class Solution:
64+
def numberOfBoomerangs(self, points: List[List[int]]) -> int:
65+
n = len(points)
66+
if len(points) < 3:
67+
return 0
68+
number = 0
69+
for i in range(n):
70+
distance_counter = collections.Counter()
71+
for j in range(n):
72+
if i == j:
73+
continue
74+
x1, y1 = points[i][0], points[i][1]
75+
x2, y2 = points[j][0], points[j][1]
76+
distance = (x1 - x2) ** 2 + (y1 - y2) ** 2
77+
distance_counter[distance] += 1
78+
number += sum([val * (val - 1) for val in distance_counter.values()])
79+
return number
6180
```
6281

6382
### **Java**
6483

6584
<!-- 这里可写当前语言的特殊实现逻辑 -->
6685

6786
```java
68-
87+
class Solution {
88+
public int numberOfBoomerangs(int[][] points) {
89+
int n = points.length;
90+
if (n < 3) {
91+
return 0;
92+
}
93+
int number = 0;
94+
for (int i = 0; i < n; ++i) {
95+
Map<Integer, Integer> distanceCounter = new HashMap<>();
96+
for (int j = 0; j < n; ++j) {
97+
if (i == j) {
98+
continue;
99+
}
100+
int x1 = points[i][0], y1 = points[i][1];
101+
int x2 = points[j][0], y2 = points[j][1];
102+
int distance = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
103+
distanceCounter.put(distance, distanceCounter.getOrDefault(distance, 0) + 1);
104+
}
105+
for (int val : distanceCounter.values()) {
106+
number += val * (val - 1);
107+
}
108+
}
109+
return number;
110+
}
111+
}
69112
```
70113

71114
### **...**

‎solution/0400-0499/0447.Number of Boomerangs/README_EN.md

+42-2
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,53 @@
5050
### **Python3**
5151

5252
```python
53-
53+
class Solution:
54+
def numberOfBoomerangs(self, points: List[List[int]]) -> int:
55+
n = len(points)
56+
if len(points) < 3:
57+
return 0
58+
number = 0
59+
for i in range(n):
60+
distance_counter = collections.Counter()
61+
for j in range(n):
62+
if i == j:
63+
continue
64+
x1, y1 = points[i][0], points[i][1]
65+
x2, y2 = points[j][0], points[j][1]
66+
distance = (x1 - x2) ** 2 + (y1 - y2) ** 2
67+
distance_counter[distance] += 1
68+
number += sum([val * (val - 1) for val in distance_counter.values()])
69+
return number
5470
```
5571

5672
### **Java**
5773

5874
```java
59-
75+
class Solution {
76+
public int numberOfBoomerangs(int[][] points) {
77+
int n = points.length;
78+
if (n < 3) {
79+
return 0;
80+
}
81+
int number = 0;
82+
for (int i = 0; i < n; ++i) {
83+
Map<Integer, Integer> distanceCounter = new HashMap<>();
84+
for (int j = 0; j < n; ++j) {
85+
if (i == j) {
86+
continue;
87+
}
88+
int x1 = points[i][0], y1 = points[i][1];
89+
int x2 = points[j][0], y2 = points[j][1];
90+
int distance = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
91+
distanceCounter.put(distance, distanceCounter.getOrDefault(distance, 0) + 1);
92+
}
93+
for (int val : distanceCounter.values()) {
94+
number += val * (val - 1);
95+
}
96+
}
97+
return number;
98+
}
99+
}
60100
```
61101

62102
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public int numberOfBoomerangs(int[][] points) {
3+
int n = points.length;
4+
if (n < 3) {
5+
return 0;
6+
}
7+
int number = 0;
8+
for (int i = 0; i < n; ++i) {
9+
Map<Integer, Integer> distanceCounter = new HashMap<>();
10+
for (int j = 0; j < n; ++j) {
11+
if (i == j) {
12+
continue;
13+
}
14+
int x1 = points[i][0], y1 = points[i][1];
15+
int x2 = points[j][0], y2 = points[j][1];
16+
int distance = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
17+
distanceCounter.put(distance, distanceCounter.getOrDefault(distance, 0) + 1);
18+
}
19+
for (int val : distanceCounter.values()) {
20+
number += val * (val - 1);
21+
}
22+
}
23+
return number;
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
def numberOfBoomerangs(self, points: List[List[int]]) -> int:
3+
n = len(points)
4+
if len(points) < 3:
5+
return 0
6+
number = 0
7+
for i in range(n):
8+
distance_counter = collections.Counter()
9+
for j in range(n):
10+
if i == j:
11+
continue
12+
x1, y1 = points[i][0], points[i][1]
13+
x2, y2 = points[j][0], points[j][1]
14+
distance = (x1 - x2) ** 2 + (y1 - y2) ** 2
15+
distance_counter[distance] += 1
16+
number += sum([val * (val - 1) for val in distance_counter.values()])
17+
return number

0 commit comments

Comments
 (0)