📅  最后修改于: 2023-12-03 15:06:14.637000             🧑  作者: Mango
给定两个数字a和b,请编写一个函数来确定这两个数字中存在的公共数字的数量。公共数字指的是两个数字中都存在的数位。
输入: a = 123, b = 234 输出: 2 解释: 数字2和3是a和b所共有的数字。
输入: a = 122, b = 224 输出: 1 解释: 数字2是a和b所共有的数字。
我们可以将两个数字都转换为字符串,然后依次遍历其中一个数字的每一个字符,并查看它是否在另一个数字中出现过。当发现相同的字符时,我们将共同出现的计数增加1。
我们可以使用两个嵌套的循环,一个遍历字符串a,另一个遍历字符串b,以此计算共同数字的数量。
def common_digits(a, b):
count = 0
for digit in str(a):
for char in str(b):
if digit == char:
count += 1
break
return count
时间复杂度:$O(n^2)$
我们可以使用哈希表来记录某个字符是否在数字a或b中出现过,然后遍历另一个数字,以此计算共同数字的数量。
def common_digits(a, b):
count = 0
appeared = {}
for digit in str(a):
appeared[digit] = 1
for digit in str(b):
if digit in appeared:
count += 1
appeared[digit] = 0
return count
时间复杂度:$O(n)$
当输入的数字较小时,方案一的暴力法可以工作得很好,但当数字变大时,这个算法会变得非常缓慢而不实用。方案二则适用于任何输入,它利用了哈希表的优势,将时间复杂度降至最佳。