#3756

Concatenate Non-Zero Digits and Multiply by Sum II

Medium
MathStringPrefix SumPrefix SumString Manipulation
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal 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
  1. 1Step 1: Create prefix arrays for concatenated non-zero digits and their sums.
  2. 2Step 2: For each query, calculate the result using the prefix arrays to quickly get x and sum.
  3. 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.