给只含 +,−,∗ 的表达式加括号,求出每一种划分对应的值。相同值如果来自不同划分,要各保留一次,最后从小到大输出。数字可以是两位数,例如 12 不能拆成 1 和 2。
给定一个由数字和运算符组成的字符串 expression。
字符串中的运算符只包含加号 +、减号 − 和乘号 ∗。
你可以通过添加括号的方式,按照不同的运算优先级计算该表达式。请找出所有不同括号组合方式下得到的计算结果。
如果不同的括号组合方式得到了相同的结果,则该结果需要重复保留。
为便于判题,请将所有计算结果按照从小到大的顺序输出。
题目保证所有计算结果均在有符号 32 位整数范围内。
输入一行字符串 expression,表示给定的数学表达式。
1≤∣expression∣≤20
expression 仅由数字以及运算符 +、−、∗ 组成。
表达式中的所有整数均在 0 到 99 的范围内。
表达式中的所有整数均不包含表示正负的前导符号。
测试数据保证所有计算结果均在有符号 32 位整数范围内。
第一行输出一个整数 k,表示通过不同括号组合方式能够得到的结果数量。
第二行输出 k 个整数,表示所有可能的计算结果,并按照从小到大的顺序排列,相邻整数之间用空格分隔。
如果不同括号组合方式得到相同结果,则需要重复输出该结果。
输入
2-1-1
输出
2
0 2
说明
表达式共有 2 种不同的括号组合方式。
((2−1)−1)=0
(2−(1−1))=2
因此所有可能的结果为 0,2。
输入
2*3-4*5
输出
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
其中结果 −10 可以通过两种不同的括号组合方式得到,因此需要保留两次。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册