class Solution:
def diffWaysToCompute(self, expression):
# If there are only numbers , Go straight back to
if expression.isdigit(): # Judge whether they are all numbers
return [int(expression)]
res = []
for i, char in enumerate(expression):
if char in ['+', '-', '*']:
# 1. decompose : Operator encountered , Calculate the result set on the left and right
# 2. solve :diffWaysToCompute The recursive function finds the solution of the subproblem
left = self.diffWaysToCompute(expression[:i]) # It doesn't contain i Of
right = self.diffWaysToCompute(expression[i+1:]) # contain i+1
# 3. Merge : According to the operation, it is consistent with the solution of the subproblem
for l in left:
for r in right:
if char == '+':
res.append(l + r)
elif char == '-':
res.append(l - r)
else:
res.append(l * r)
return res
expression = "2-1-1"
a = Solution.diffWaysToCompute(expression) # Such a direct call would be wrong , It suggests one less self Parameters of , Use this S = Solution() If you instantiate the class first, you can ignore self 了 .
# The following is true
S = Solution()
a = S.diffWaysToCompute(expression)
print(a)