Consider all possible integers consisting of exactlyk digits, where each digit is chosen independently from the integer range [l, r] (inclusive). If 0 is included in the range, leading zeros are allowed.
Return an integer representing the sum of all such numbers.βββββββ Since the answer may be very large, return it modulo109 + 7.
Β
Example 1:
Input:l = 1, r = 2, k = 2
Output:66
Explanation:
All numbers formed using k = 2 digits in the range [1, 2] are 11, 12, 21, 22.
The total sum is 11 + 12 + 21 + 22 = 66.
Example 2:
Input:l = 0, r = 1, k = 3
Output:444
Explanation:
All numbers formed using k = 3 digits in the range [0, 1] are 000, 001, 010, 011, 100, 101, 110, 111βββββββ.
These numbers without leading zeros are 0, 1, 10, 11, 100, 101, 110, 111.
The total sum is 444.
Example 3:
Input:l = 5, r = 5, k = 10
Output:555555520
Explanation:βββββββ
5555555555 is the only valid number consisting of k = 10 digits in the range [5, 5].
The total sum is 5555555555 % (109 + 7) = 555555520.
Β
Constraints:
0 <= l <= r <= 9
1 <= k <= 109
Solutions
Solution 1: Math + Fast Power
We enumerate each digit \(x\) from the lowest position to the highest. Suppose the current position is the \(i\)-th digit (0-indexed), which contributes \(x \cdot 10^i\) to the number. The remaining \(k - 1\) digits each have \(r - l + 1\) choices, so the contribution of the current position is \(x \cdot 10^i \cdot (r - l + 1)^{k - 1}\). Since \(x\) ranges over \([l, r]\), the sum of all values of \(x\) is \(\frac{(l + r) \cdot (r - l + 1)}{2}\). Therefore, the total sum of all such numbers is:
Since \(k\) can be up to \(10^9\), we use fast power (binary exponentiation) to compute \((r - l + 1)^{k - 1}\) and \(10^k\). Division by \(9\) is handled using the modular inverse of \(9\) via Fermat's little theorem.
The time complexity is \(O(\log k)\) and the space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9101112131415161718192021222324
classSolution:defsumOfNumbers(self,l:int,r:int,k:int)->int:mod=10**9+7n=r-l+1# ((l + r) * (r - l + 1) // 2) % modtotal=(l+r)*n//2%mod# pow(r - l + 1, k - 1, mod)part1=pow(n%mod,k-1,mod)# (pow(10, k, mod) - 1)part2=(pow(10,k,mod)-1)%mod# Fermat inverse of 9inv9=pow(9,mod-2,mod)ans=totalans=ans*part1%modans=ans*part2%modans=ans*inv9%modreturnans