1. 解题思路
这一题的话只需要统计一下每一个位上0-9各自出现了多少次即可。
然后,对于每一位,答案就是:
s = ∑ i = 0 9 n i ( ∑ j = 0 9 n j − n i ) 2 = ( ∑ i = 0 9 n i ) 2 − ∑ i = 0 9 n i 2 2 s = \frac{\sum\limits_{i=0}^{9}n_i(\sum\limits_{j = 0}^{9}n_j - n_i)}{2} = \frac{(\sum\limits_{i=0}^{9}n_i)^2 - \sum\limits_{i=0}^{9}n_i^2}{2} s=2i=0∑9ni(j=0∑9nj−ni)=2(i=0∑9ni)2−i=0∑9ni2
2. 代码实现
给出python代码实现如下:
class Solution:
def sumDigitDifferences(self, nums: List[int]) -> int:
cnt = defaultdict(lambda : defaultdict(int))
for num in nums:
idx = 0
while num != 0:
digit = num % 10
cnt[idx][digit] += 1
idx += 1
num = num // 10
ans = 0
for idx in cnt:
digits = cnt[idx].values()
s = sum(digits)
i2 = sum(x*x for x in digits)
ans += (s**2 - i2) // 2
return ans
提交代码评测得到:耗时978ms,占用内存30.3MB。