和归并排序的思很像,先分再治
观察得出表达式可以根据运算符进行分解,
将分解后的答案再根据运算符进行合并
可以使用一个字典保存已经计算过的表达式的值避免重复计算
所有符号都俩俩结合一下再组合
class Solution(object):
def __init__(self):
self.memo = {}
def diffWaysToCompute(self, expression):
"""
:type expression: str
:rtype: List[int]
"""
if expression in self.memo:
return self.memo[expression]
if expression.isdigit():
return [int(expression)]
res = []
for i,char in enumerate(expression):
if char in ["+","-","*"]:
left = self.diffWaysToCompute(expression[:i])
right = self.diffWaysToCompute(expression[i+1:])
for a in left:
for b in right:
if char == "+":
res.append(a+b)
elif char == "-":
res.append(a-b)
else:
res.append(a*b)
self.memo[expression] = res
return res