Sum of all possible expressions of a numeric string possible by inserting addition operators

• Difficulty Level : Easy
• Last Updated : 23 Nov, 2022

Given a numeric string str of length N, the task is to find the sum of all possible expressions by inserting the ‘+’ operator between the characters of the string any number of times.

Examples:

Input: str = “125” Output: 176 Explanation: Inserting “+” after 1st index modifies str to “1+25” and value = 26 Inserting “+” after 2nd index modifies str to “12+5” and value = 17 Inserting “+” after both 1st and 2nd index modifies str to “1+2+5” and value = 8 Therefore, the total sum of all possible expression is 125 + 26 + 17 + 8 = 176

Input: str = “9999999999”
Output: 12656242944

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The idea is to insert the ‘+’ operator at all possible index of the string in all possible ways and calculate the sum. Finally, print the total sum obtained. Follow the steps below to solve the problem:

• Initialize a variable say, sumOfExp to store the sum of all possible expression by inserting the ‘+’ operator at all possible indices of the string.
• Generate all possible subset of indices of the string iteratively. For every subset of indices inserts the ‘+’ operator at elements of the subset and increment sumOfExp by the sum of the current expression.
• Finally, print the value of sumOfExp.

Below is the implementation of the above approach:

Python3

 `# Python program to implement``# the above approach` `# Function to find sum of all expressions by``# inserting '+' operator at all possible indices``def` `findSumOfExpressions(S, N):` `    ``# Stores sum of all expressions by inserting``    ``# '+' operator at all possible indices``    ``sumOfExp ``=` `0` `    ``# Generate all possible subset``    ``# of indices iteratively``    ``for` `i ``in` `range``(``2` `*``*` `(N ``-` `1``)):` `        ``# Stores sum of``        ``# current expressions``        ``ans_sub ``=` `0` `        ``# Stores numbers of``        ``# current expressions``        ``subst ``=` `S[``0``]` `        ``# Traverse the string at insert + at``        ``# current subset of indices``        ``for` `j ``in` `range``(N ``-` `1``):` `            ``# If current index exists``            ``# in the current subset``            ``if` `(i >> j) & ``1``:` `                ``# Update ans_sub``                ``ans_sub ``+``=` `int``(subst)` `                ``# Update subset``                ``subst ``=` `S[j ``+` `1``]``            ``else``:` `                ``# Update subset``                ``subst ``+``=` `S[j ``+` `1``]` `            ``# + can't be inserted after``            ``# the last index   ``            ``if` `j ``=``=` `N ``-` `2``:``                ``ans_sub ``+``=` `int``(subst)` `        ``# Update ans``        ``sumOfExp ``+``=` `ans_sub` `    ``# Base case    ``    ``if` `N ``=``=` `1``:``        ``print``(``int``(S))``    ``else``:` `        ``# Print answer``        ``print``(sumOfExp)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``# Given string``    ``S ``=` `"9999999999"``    ` `    ``# Length of the string``    ``N ``=` `len``(S)` `    ``# Function call``    ``findSumOfExpressions(S, N)`

Output:

`12656242944`

Time Complexity: O(2N * N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up