核心想法:把左侧表达式看成关于未知数的一次式
用一对数值 (k, b) 表示一个子表达式的值:k*x + b。
由于未知数只出现 1 次,所以任意乘法中,最多只有一边含 x,不会出现 x^2。
因此可以安全做线性合并:
给一个字符串的方程表达式 s ,请你实现一个计算器来计算出它的未知数的值。用例保证未知数为整数
1.输入为方程的字符表达。例如:(x3+2)5=100 或者 5(3x+2)=100 。由于乘法交换律,因此两种形式均可能出现。
2.方程由数字、'x'、'+'、'∗'、'('、')'、和 '=' 组成
3.方程未知数 x 只出现在左边,右边为数字。且未知数 x 只出现 1 次
4.所有数字均在 (−2147483648,2147483647] 范围内
5.不会出现连续两个运算符
1.求解出的未知数的值。用例保证未知数为整数
2.如果结果是负数,在前面加负号 '−'
3.合法的输出有如下 3 种情况:a、0、−a
其中 a 取值范围均为 [0,2147483647] 范围
输入
10+2*x=6
输出
-2
说明
求解方程为 −2 , 请注意乘法的计算优先吸级高于加法
输入
(x+2)*3=21
输出
5
说明
求解方程
3x+6=21
3x=15
x=5
输入
((x+2)*3+1)*2+5=79
输出
10
说明
将 x=10 带入方程 (10+2)∗3+1)∗2+5=79,方程两边相等
输入
(x+2)*3=15
输出
3
说明
将 x=3 带入方程后 (3+2)∗3=15 方程两边相等
输入
x+1=3
输出
2
说明
当 x=2 时方程等式成立
提示
5<=s.length<=1000
每个数字和运行的计算格适合于一个有符号的 32 位整数
当乘法和加法一起目无括号限制时,乘法的计算顺序高于加法