栈的使用后缀表达式的计算

2018/08/12 Offer 共 782 字,约 3 分钟

title

problem link

Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are+,-,*,/. Each operand may be an integer or another expression.

Some examples:

  ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

solution


import java.util.ArrayDeque;

public class Solution {
    public int evalRPN(String[] tokens) {
        ArrayDeque<Integer> s=new ArrayDeque<>();
        for(int i=0;i<tokens.length;i++){
            try{
                int num=Integer.parseInt(tokens[i]);
                s.push(num);
            }
            catch (Exception e){
                int b=s.pop();
                int a=s.pop();
                s.push(get(a,b,tokens[i]));
            }
        }
        return s.pop();

    }
    int get(int a,int b,String operator){
        switch (operator){
            case "+":
                return a+b;
            case "-":
                return a-b;
            case "*":
                return a*b;
            case "/":
                return a/b;
            default:
                return 0;
        }
    }
}

中缀表达式转换后缀表达式

使用一个栈记录操作符

  1. 遇到数字直接输出
  2. 遇到操作符,比栈顶优先级大入栈
  3. 遇到操作符,比栈顶优先级小,则pop()直到栈顶优先级小于遇到的操作符

Search

    Table of Contents