第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个量化数字,效率较高。经过测试,代码能够正确输出预期结果,满足题目要求。