算法表达式
中缀表达式(A+(B-C/D)E)对应的前缀表达式是(+A-B/CDE)对应的后缀表达式为(ABCD/-E*+)
- 中缀式
正常的数学表达式
- 前缀式 (波兰式)
操作符在数字前面
- 后缀式 (逆波兰式)
操作符在数字后面
中缀表达式->后缀表达式【括号去掉了】【符号栈:改变符号位置】
后缀表达式:List<String>,不能用sb,因为可能为42,不是单数
0) 如果遇到’ ',continue
1)如果遇到数字,我们就直接将其加入到后缀表达式。
2)如果遇到左括号,则我们将其放入到栈中。
3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符加入到后缀表达式直到遇到左括号为止,接着将左括号弹出,但不加入到结果中。
4)如果遇到其他的操作符,如果栈为空,把符号入栈,否则弹出优先级>=它的符号,直到遇到左括号或者栈为空。弹出完这些元素后,最后将当前遇到的操作符压入到栈中。
遇到*/,把符号栈中的*和/弹出到后缀表达式,直到遇到左括号或者栈为空或者遇到±,然后把该符号压栈
遇到±,要把符号栈中所有的操作符弹出到后缀表达式,知道遇到左括号,或者栈为空,然后把该符号压栈
5)如果读到了中缀表达式的末尾,则将栈中所有元素依次弹出。
class Solution {
public int calculate(String s) {
//获取后缀表达式(没有括号了)
List<String> list = new ArrayList<>();
Stack<Character> st_sign = new Stack<>();
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if(c==' ') continue;
else if(Character.isDigit(c)) {
int j=i

这篇博客介绍了如何将中缀表达式转换为后缀表达式,以及如何使用后缀表达式求解计算结果。中缀表达式如A+(B-C/D)E,其对应的前缀表达式是+A-B/CDE,后缀表达式为ABCD/-E*+。转换过程中涉及到符号栈和数字栈的运用,处理括号和不同优先级的运算符。在计算后缀表达式时,遇到运算符会弹出栈顶元素进行运算并将结果压栈,最终结果在栈中。
最低0.47元/天 解锁文章
269

被折叠的 条评论
为什么被折叠?



