常年写业务代码的我遇到了四则运算,只要我不尴尬,尴尬的就不是我。这里还是记录一下四则运算思路吧,希望在以后工作生活中有用。四则运算在面试中其实也经常会遇到,经常刷LeetCode的应该不会陌生。其实在有一次面试中遇到了类似的问题,当时是计算一个公式中最大的嵌套层数,就是最大的有效的括号的层数。这里就不放什么启发的思路了,直接上步骤。
1.定义两个栈,栈A用于存数据,栈B用于存运算符
2.运算符优先级,+-*/(), 优先级从左到右依次变高,先计算优先级高的;
- 但是在这里优先级这样定义方便计算 “)(+-*/”,
- 这里左右括号其实会特殊处理,并没有完全按照正常优先级定义
- 只要遇到左括号就直接进入符号栈B
- 一旦遇到右括号,必须取出栈B顶的符号进行计算,直到取出左括号
- 这样做的好处是最后的符号栈B里就是优先级从低到高排好顺序的运算符了,不用考虑括号嵌套的问题了
3.依次从运算式中取数据和符号,数据直接进入栈A,符号则与栈B顶的符号记性优先级比较,高就直接入栈;
4.反之,就从栈B弹出栈顶符号,同时从栈A弹出两个数据进行计算,将计算结果存入栈A;
5.如果优先级还是低于栈B顶的符号,就继续步骤4,反之就将结果直接存入栈A;
6.当运算式遍历完后,则依次从栈B顶取运算符,从栈A顶取数据进行计算,直到栈A和栈B为空;
代码后续再贴上来