Sum of Decoded Numbers - Solution & Explanation
Practice this problemProblem Statement
You are given an integer array nums.
Each nums[i] is an encoded integer representing two positive integers xi and yi. To decode nums[i], define:
widthi = nums[i] % 10.di = floor(nums[i] / 10).xias the integer formed by the firstwidthidigits of the decimal representation ofdi.yias the integer formed by all remaining digits of the decimal representation ofdi.
It is guaranteed that the decimal representation of di contains more than widthi digits. Therefore, both xi and yi contain at least one digit.
The decoded value of nums[i] is xiyi.
Return the sum of the decoded values of all elements in nums, modulo 109 + 7.
The floor() function returns the integer part of the division.
Example 1:
Input: nums = [231]
Output: 8
Explanation:
- For 231, we have
width = 1,d = 23,x = 2, andy = 3. - The decoded value of 231 is
23 = 8. - Since there is only one element in
nums, the sum of the decoded values is 8.
Example 2:
Input: nums = [2522,2101]
Output: 1649
Explanation:
- For 2522, we have
width = 2,d = 252,x = 25, andy = 2. - The decoded value of 2522 is
252 = 625. - For 2101, we have
width = 1,d = 210,x = 2, andy = 10. - The decoded value of 2101 is
210 = 1024. - The sum of the decoded values is
625 + 1024 = 1649.
Example 3:
Input: nums = [2301]
Output: 73741817
Explanation:
- For 2301, we have
width = 1,d = 230,x = 2, andy = 30. - The decoded value is
230 = 1073741824. - Therefore, the answer is
1073741824 modulo (109 + 7) = 73741817.
Constraints:
1 <= nums.length <= 105100 < nums[i] < 10151 <= widthi <= 91 <= xi, yi < 109- The digit sequences used to form
xiandyido not have leading zeros. - It is guaranteed that every element in
numsis a valid encoded integer.
Approach Overview
Problem Overview: You are given a compressed numeric expression where numbers are encoded as k[digits]. This means the digit string digits is repeated k times to form a decimal integer, and multiple such terms are separated by +. Decode each term, add the resulting integers, and return the sum modulo 1_000_000_007. Because k can be huge, the decoded number may have millions of digits, so you cannot actually expand it.
Approach 1: Brute-Force Expansion (O(expanded length) time, O(expanded length) space)
Parse the string and, for each k[digits], append the digit block k times to a string buffer, then convert that string to an integer and add it to the running total. This mirrors the problem statement directly and is simple to verify on small inputs, but it fails when k is large because both time and memory scale with the decoded output size, not with the encoded input length. For repeated counts above a few thousand, this approach can blow up instantly.
Approach 2: Simulation + Fast Power (O(N log M) time, O(1) space)
Simulate the expression by scanning left to right, but avoid constructing the repeated digits. For a token k[digits] where digits is an L-digit string with numeric value s, the decoded integer equals s * (10^(L*k) - 1) / (10^L - 1). Compute 10^(L*k) modulo 1_000_000_007 using binary exponentiation and multiply by the modular inverse of 10^L - 1 via Fermat's little theorem. This makes each token O(log(L*k)), so the entire scan is O(N log M), where M is the maximum repetition count. If you see a plain number, treat it as a 1[digits] token. The whole solution uses only a few integer variables, so extra space is constant.
Recommended for interviews: Most engineers can write the brute-force expander, but joining all the digits takes you out of O(N) and is an automatic fail when k reaches 10^6 or more. Interviewers expect the fast-power solution because it shows you recognize the geometric-series shape inside the repetition. Walk through a small example such as 3[12] and derive the value as 12 * (10^6 - 1) / 99, then explain that you compute only the numerator with pow. Review modular arithmetic and string parsing to strengthen the two skills at the core of this problem. The final implementation is available in Python, Java, C++, Go, and TypeScript.
Solution
We decode each element exactly as the statement describes. For each element v in nums, its width is w = v bmod 10, and the number left after dropping the last digit is d = \lfloor v / 10 \rfloor. Converting d to its decimal string s, the value x is the integer formed by the first w characters of s, and y is the integer formed by the remaining characters.
Since y can be as large as 10^9, multiplying repeatedly would be too slow, so we use fast power to compute x^y bmod (10^9 + 7) in O(log y) time, then accumulate the decoded values modulo 10^9 + 7.
The time complexity is O(n times log M), and the space complexity is O(log M). Here, n is the length of the array nums, and M is the maximum value in the array.
Code
Python
Java
C++
Go
TypeScript
Detailed Complexity Analysis
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Brute-Force Expansion | O(expanded length) | O(expanded length) | Only for tiny repetition counts or sample-style test cases |
| Simulation + Fast Power | O(N log M) | O(1) | General case; handles huge repetitions, expected in interviews |
Video Solutions (5)
LeetCode Weekly Contest 517 | 4038 & 4039 | Count Integers in a Block + Sum of Decoded Numbers | C++
Frequently Asked Questions
Sum of Decoded Numbers Python solution
Is Sum of Decoded Numbers easy or hard?
How to solve Sum of Decoded Numbers in O(n log m)?
What is the best approach for Sum of Decoded Numbers?
Is Sum of Decoded Numbers asked at Google/Amazon/Meta?
What data structure is used in Sum of Decoded Numbers?
What is the time complexity of Sum of Decoded Numbers?
Ready to solve this problem?
Practice Sum of Decoded Numbers with our built-in code editor and test cases.
Practice on FleetCodeProblem Info
Table of Contents
Practice this problem
Open in Editor