Problem of the day
You are given a string 'S' containing an arithmetic expression. Your task is to return all the possible results obtained after putting the valid parenthesis.
It is guaranteed that the given string only contains the ‘+’, ‘-’, ‘*’ operator.
The valid expression is an expression where a number of closing and opening parenthesis is the same. And the result is computed by solving inner parentheses first.
For example:S = 2 * 3 - 2
((2 * 3) - 2) = 4
(2 * (3 - 2)) = 2 , [4, 2] or [2, 4] are the solution.
The first line of input contains an integer ‘T’ denoting the number of test cases to run. Then the test case follows.
The first and only line of each test case contains arithmetic expressions containing numbers and ‘+’, ‘-’, ‘*’ as operators.
Output Format:
For each test case print all the values that can be obtained from the expression after putting valid parenthesis.
You can print values in any order.
The output for each test case will be printed in a separate line.
Note:
You don’t need to print anything. It has already been taken care of. Just implement the given function.
1 <= T <= 10
3 <= len(S) <= 65
len(S) is the length of the string 'S' it is guaranteed that input has at least one operator.
Time Limit: 1 sec.
2
1+2*3+1
1+1*2
9 8 12 8 10
3 4
For first test case output is [9,8,12,8,10] as,
((1 + 2) * (3 + 1)) = 9
((1 + (2 * 3)) + 1) = 8
((1 + 2) * (3 + 1)) = 12
(1 + ((2 * 3) + 1)) = 8
(((1 + 2) * 3) + 1) = 10
For the second test case output is [3, 4] or [4,3] as
((1 + 1) * 2) = 4
(1 + (1 * 2)) = 3
2
1+1-1-1
13*1
2 2 0 0 0
13
Brute Force, Can we use recursion to try all the parentheses possible?
We will go through the string S from left to right if we encounter an operator we will split S across the operator and recursively solve the expression before the operator and after the operator. Then use the results of the left part and the right part to create the answer for expression.
The algorithm will be-
O(2 ^ N), where ‘N’ the number of operators in ‘S’.
The number of all valid expressions is necessarily given by the Catalan numbers. As the Catalan number for any N is of order O(2 ^ N), time complexity will be O(2 ^ N).
O(2 ^ N), where ‘N’ the number of operators in ‘S’.
The space complexity due to the recursion stack will be O(2 ^ N).