相似题目95,可以作为拓展。
题目:
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。
示例 1:
输入: "2-1-1"
输出: [0, 2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2
示例 2:
输入: "2*3-4*5"
输出: [-34, -14, -10, -10, 10]
解释:
(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/different-ways-to-add-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:
class Solution:
def diffWaysToCompute(self, input: str) -> List[int]:
signal = {
'+': lambda x,y: x+y,
'-': lambda x,y: x-y,
'*': lambda x,y: x*y
}
def helper(input):
res = []
n = len(input)
for i in range(n):
if input[i] in signal:
print("i:%d,input[i]:%s"%(i,input[i]))
for left in helper(input[:i]):
#print(input[:i])
print("left:%d" %(left))
for right in helper(input[i+1:]):
#print(input[i+1:])
print("right:%d" %(right) )
res.append(signal[input[i]](left, right))
if not res:
res.append(int(input))
return res
return helper(input)
为了便于理解print输出:
i:1,input[i]:-
left:2
i:1,input[i]:-
left:1
right:1
right:0
i:3,input[i]:-
i:1,input[i]:-
left:2
right:1
left:1
right:1
解法二: