leetcode-640-表达式解析-解题思路
这个提其实不太难,第一眼却没做出来,看了题解之后才思路清晰了, 有思路了很容易做出来
所有的表达式,经过计算最总都会变成, n\*x + val = 0
, n
val
都是数值,我们要做的就是把 n
,val
计算出来,
- 考虑等号(“=”)的问题,和做算术题一样,把右边挪到左边, 相当于就是减去左边, 也就是 减一下(-)
设置一个标记,把之后的值都取个反, 对于代码的话, 不就是 a = -a 么? - 符号判断, 加号, 减号 ,等于号 , 加号 不用管 ,减号 取个反, 还有一个考虑点就是 = 这个标记之后的情况, 结合判断
例如: 如果是 = 右边的, 本来是 - , 现在就变成了 + - 解析 x 之前的数字,这个就是一个数字字符串 转数字的算法
可能是100x
,5x
,18x
等等这种情况, 其实就是正常解析数字字符串一样, 每次 数值*10 + 当前值 ,直到 不是数字 停止, 保存并累加 - 正常数值就没啥考虑的了,直接累加即可.
最后根据结果,进行计算, 需要判断表达式是否有效的情况.
如果 n*x
的 n
为 0
的时候,x
对表达式无影响, 这时候,判断 val 即可:
- 如果
val = 0
即0 = 0
, 有 无数解,任意值都可以, - 如果是
val != 0
,那么就是无解.
剩下情况就是正常解, 返回 -val / n
即可. 下面是官方的 golang
题解。
1 | func solveEquation(equation string) string { |
leetcode-640-表达式解析-解题思路