# 241. Different Ways to Add Parentheses
## recursive
No memory, bad.
```python=
class Solution:
def diffWaysToCompute(self, input: str) -> List[int]:
if input.isnumeric():
return [input]
res = []
for ind, ch in enumerate(input):
if ch == '+':
def func(a,b): return int(a)+int(b)
elif ch == '-':
def func(a,b): return int(a)-int(b)
elif ch == '*':
def func(a,b): return int(a)*int(b)
else:
continue
str1 = input[:ind]
str2 = input[ind+1:]
res1 = self.diffWaysToCompute(str1) # have to use `self.` !!
res2 = self.diffWaysToCompute(str2)
for num1 in res1:
for num2 in res2:
res.append(func(num1, num2))
return res
```
## recursive but w/ a global dict as a dp chart
```python=
def diffWaysToCompute(self, input: str) -> List[int]:
def helper(input):
if input.isnumeric():
return [input]
if input in d:
# print(input)
return d[input]
res = []
# ct.append(1)
for ind, ch in enumerate(input):
if ch == '+':
def func(a,b): return int(a)+int(b)
elif ch == '-':
def func(a,b): return int(a)-int(b)
elif ch == '*':
def func(a,b): return int(a)*int(b)
else:
continue
str1 = input[:ind]
str2 = input[ind+1:]
res1 = helper(str1)
res2 = helper(str2)
for num1 in res1:
for num2 in res2:
res.append(func(num1, num2))
d.update({input:res}) # You can't d.update(input=res) # that is for str "input"
return res
d = {}
return helper(input)
```
###
```python=
class Solution:
def diffWaysToCompute(self, input: str) -> List[int]:
def helper(input):
if input.isnumeric():
return [int(input)]
if input in d:
return d[input]
res = []
for ind, ch in enumerate(input):
if ch == '+':
def func(a,b): return a+b
elif ch == '-':
def func(a,b): return a-b
elif ch == '*':
def func(a,b): return a*b
else:
continue
str1 = input[:ind]
str2 = input[ind+1:]
res1 = helper(str1)
res2 = helper(str2)
for num1 in res1:
for num2 in res2:
res.append(func(num1, num2))
d.update({input:res}) # You can't d.update(input=res) # that is for str "input"
return res
d = {}
return helper(input)
```
###
```python=
class Solution:
def diffWaysToCompute(self, input: str) -> List[int]:
d = {}
operation_dict = {'+': lambda a,b:a+b,
'-': lambda a,b:a-b,
'*': lambda a,b:a*b}
def helper(input):
if input.isnumeric():
return [int(input)]
if input in d:
return d[input]
res = []
for ind, ch in enumerate(input):
if ch not in operation_dict:
continue
func = operation_dict[ch]
str1 = input[:ind]
str2 = input[ind+1:]
res1 = helper(str1)
res2 = helper(str2)
for num1 in res1:
for num2 in res2:
res.append(func(num1, num2))
d.update({input:res}) # You can't d.update(input=res) # that is for str "input"
return res
return helper(input)
```