统计某个给定范围[L,R]内的所有整数中,数字9出席的次数,比如给定范围[88,99]中9出现12次,编写python代码
时间: 2024-03-22 17:41:36 浏览: 68
统计每个整数的出现次数
3星 · 编辑精心推荐
以下是一个实现上述算法的 Python 代码:
```python
def count_9_between(L, R):
if L > R:
return 0
digits_L = [int(d) for d in str(L)]
digits_R = [int(d) for d in str(R)]
n = len(digits_R)
count = 0
for i in range(n):
if i == 0:
if digits_R[i] < 9:
count += digits_L[i] * (10 ** (n-i-1))
elif digits_R[i] == 9:
count += digits_L[i] * (10 ** (n-i-1)) + 1
else:
count += (digits_L[i]+1) * (10 ** (n-i-1))
else:
if digits_R[i] < 9:
count += digits_L[i] * (10 ** (n-i-1))
count += sum(count_9_between(L, R-10**i)) * (digits_R[i])
elif digits_R[i] == 9:
count += digits_L[i] * (10 ** (n-i-1))
count += sum(count_9_between(L, R-10**i)) * 9
count += (R // 10**(i-1)) % (10**(i-1)) + 1
else:
count += (digits_L[i]+1) * (10 ** (n-i-1))
count += sum(count_9_between(L, R-10**i)) * 9
count += (10**(i-1))
return count
```
该函数的输入是 L 和 R,输出是 [L,R] 范围内数字9出现的总次数。函数中用到了递归计算子区间内的数字9出现的总次数。注意,该函数的时间复杂度为 O(log R),因为最多需要递归 log R 层。
阅读全文