目录

3153:所有数对中数位不同之和(1645 分)

力扣第 398 场周赛第 3 题

题目

你有一个数组 nums ,它只包含 整数,所有正整数的数位长度都 相同

两个整数的 数位不同 指的是两个整数 相同 位置上不同数字的数目。

请你返回 nums所有 整数对里,数位不同之和。

示例 1:

输入:nums = [13,23,12]

输出:4

解释:
计算过程如下:
- 13 和 23 的数位不同为 1 。
- 13 和 12 的数位不同为 1 。
- 2312 的数位不同为 2 。
所以所有整数数对的数位不同之和为 1 + 1 + 2 = 4

示例 2:

输入:nums = [10,10,10,10]

输出:0

解释:
数组中所有整数都相同,所以所有整数数对的数位不同之和为 0 。

提示:

  • 2 <= nums.length <= 105
  • 1 <= nums[i] < 109
  • nums 中的整数都有相同的数位长度。

相似问题:

分析

计算每一位的贡献即可。

解答

1
2
3
4
5
6
7
8
class Solution:
    def sumDigitDifferences(self, nums: List[int]) -> int:
        n = len(nums)
        res = 0
        for A in zip(*map(str,nums)):
            for a in Counter(A).values():
                res += a*(n-a)
        return res//2

298 ms