青训营X豆包MarsCode 技术训练营第三课 | 豆包MarsCode AI 刷题

57 阅读2分钟

第498题 量化数字的统计

题目分析

题目要求统计在给定范围 [L, R] 内所有“量化数字”的个数。量化数字是指能被3整除且所有位数相同的数字。例如:111、222、333等。我们需要明确:

  • 数字的位数可以从1位到最多9位。
  • 量化数字的组成是相同的数字,从1到9。

解题思路

  • 生成量化数字:考虑所有可能的相同数字(1-9),生成从1位到9位的量化数字。

  • 范围检查:检查生成的量化数字是否在 [L, R] 的范围内。

  • 整除检查:检查该数字是否能被3整除。

  • 计数:对于符合上述两个条件的数字,进行计数。

通过这样的思路,我们可以确保正确模拟比赛的过程并找到最终的赢家。

解题代码

def solution(L: int, R: int) -> int:
    count = 0
    
    # 遍历数字1到9
    for digit in range(1, 10):
        # 生成量化数字,从1位到9位
        for length in range(1, 10):
            # 生成量化数字
            quant_num = int(str(digit) * length)
            
            # 检查是否在范围内并且能被3整除
            if L <= quant_num <= R and quant_num % 3 == 0:
                count += 1
    
    return count

if __name__ == '__main__':
    print(solution(L = 5, R = 125) == 6)
    print(solution(L = 10, R = 300) == 5)
    print(solution(L = 100, R = 999) == 9)

模块解释

  • L, R:输入范围。

  • count:初始化计数器。

  • 外层循环遍历1到9的数字作为组成部分。

  • 内层循环生成量化数字,位数从1到9。

  • quant_num = int(str(digit) * length):通过字符串重复生成量化数字。

  • 使用 if 语句检查数字是否在范围内并且能被3整除,如果满足条件则计数器加1。

  • 最后返回计数结果。。

结论

通过上述分析,我们能够有效地统计在给定范围内的量化数字个数。这个算法的时间复杂度是 O(9 * 9) = O(81),因为我们最多会生成81个量化数字,效率较高。经过测试,代码能够正确输出预期结果,满足题目要求。