1. 解题思路
这一题我的实现方法比较笨拙,就是将num2当中的元素提前用一个counter记录下来,然后对于num1当中的每一个元素,考察其是否能被k整除,如果可以的话,那么只要考察剩余部分的所有因子在num2构成的counter当中的数目之和即可,如果不能被k整除,那么直接跳过即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int:
cnt = Counter(nums2)
@lru_cache(None)
def count(n):
k = int(sqrt(n))
status = [0 for _ in range(k+1)]
ans = cnt[1] + cnt[n] if n != 1 else cnt[1]
for i in range(2, k+1):
if status[i] == 1:
continue
if n % i != 0:
for j in range(i, k+1, i):
status[j] = 1
else:
if n == i*i:
ans += cnt[i]
else:
ans += cnt[i] + cnt[n//i]
return ans
return sum([0 if num % k != 0 else count(num // k) for num in nums1])
提交代码评测得到:耗时4433ms,占用内存43.3MB。