Python实现nbDig函数处理大数值统计平方中指定数字出现次数
nbDig函数Python实现方案(适配大数值输入)
Python原生支持任意精度整数计算,不存在其他语言里大整数平方溢出的问题,哪怕n到百万级,k**2的计算结果都是精确的,不需要额外处理大整数运算逻辑。
针对题目给出的n最高到数十万的场景,直接用字符串计数的方案是效率最高、代码最简洁的选择,不需要引入复杂的数位DP等算法,完全可以满足平台的时间限制。
实现逻辑
- 先把要统计的数字d转为字符串,后续直接用字符串方法做匹配计数,比Python层手写逐位取模判断速度更快(字符串count方法是底层C实现,执行效率远高于Python层面的循环)
- 遍历0到n的所有整数,计算每个数的平方值后转为字符串
- 统计每个平方字符串中目标数字字符的出现次数,累加所有次数即为最终结果
代码实现
基础易读版本:
def nbDig(n, d): target_char = str(d) count = 0 for num in range(n + 1): square = num * num count += str(square).count(target_char) return count
紧凑写法(逻辑完全一致):
def nbDig(n, d): return sum(str(k * k).count(str(d)) for k in range(n + 1))
性能说明
以上实现在n=200000量级(比如题目提到的195856)时,总循环次数不到20万次,Python运行耗时不到0.1秒,远低于Codewars的单测时间阈值。
你可以直接用题目给出的样例验证:传入n=12、d=1时,函数返回7,和预期结果完全一致,同时可以正确覆盖n=0、d=0这类边界场景。
如果后续遇到n到千万级以上的极端场景,再考虑用数位DP的方式跳过逐个遍历的过程即可,当前场景下上述实现是最优选择。
内容的提问来源于stack exchange,提问作者Logono
相关产品推荐
相关产品推荐

