#3756
Concatenate Non-Zero Digits and Multiply by Sum II
MediumMathStringPrefix SumPrefix SumString Manipulation
Approaches
Brute ForceOptimal
Complexity Comparison
| Brute Force | Optimal Solution★ | |
|---|---|---|
| Time | O(n²) | O(n) |
| Space | O(1) | O(n) |
💡
Intuition
Time O(n)Space O(n)
Use prefix arrays to store cumulative non-zero digit concatenations and their sums, allowing O(1) retrieval for each query.
⚙️
Algorithm
3 steps- 1Step 1: Create prefix arrays for concatenated non-zero digits and their sums.
- 2Step 2: For each query, calculate the result using the prefix arrays to quickly get x and sum.
- 3Step 3: Return the results modulo 10^9 + 7.
solution.py17 lines
1def concatenate_and_multiply(s, queries):
2 mod = 10**9 + 7
3 n = len(s)
4 prefix_x = [''] * (n + 1)
5 prefix_sum = [0] * (n + 1)
6 for i in range(1, n + 1):
7 prefix_x[i] = prefix_x[i - 1]
8 prefix_sum[i] = prefix_sum[i - 1]
9 if s[i - 1] != '0':
10 prefix_x[i] += s[i - 1]
11 prefix_sum[i] += int(s[i - 1])
12 result = []
13 for l, r in queries:
14 x = int(prefix_x[r + 1]) if prefix_x[r + 1] else 0
15 sum_digits = prefix_sum[r + 1] - prefix_sum[l]
16 result.append(x * sum_digits % mod)
17 return resultℹ
Complexity note: Prefix arrays allow for O(1) retrieval of concatenated values and sums, making the solution efficient.
- 1Use prefix sums for efficient range queries.
- 2Track non-zero digits separately for concatenation.
Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.