- 直接统计数组中的数字两两组合可以得到的乘积
- 求将相同乘积的组合再两两组合的数量
- 最后由于abcd的值可以互换,每一个组合通过呼唤位置可以得到8种不同的组合,所以最后乘以8
class Solution:
def tupleSameProduct(self, nums: List[int]) -> int:
d = defaultdict(int)
l = len(nums)
for i in range(l):
for j in range(i + 1, l):
d[nums[i] * nums[j]] += 1
return sum(n*(n - 1)//2 if n > 1 else 0 for n in d.values())*8
涉及到计数的,Counter就是必手动计数快一点,这涉及到 collection中的Counter在调用时使用C库有关