V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hakunamatata11
V2EX  ›  问与答

逆波兰表达式求值

  •  
  •   hakunamatata11 · 2020-08-14 18:22:53 +08:00 · 781 次点击
    这是一个创建于 1865 天前的主题,其中的信息可能已经有所发展或是发生改变。

    求逆波兰表达式的值。 在逆波兰表达法中,其有效的运算符号包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰计数表达。

    点此处在线做题

    样例 1:

    输入: ["2", "1", "+", "3", "*"] 
    输出: 9
    解释: ["2", "1", "+", "3", "*"] -> (2 + 1) * 3 -> 9
    
    

    样例 2:

    输入: ["4", "13", "5", "/", "+"]
    输出: 6
    解释: ["4", "13", "5", "/", "+"] -> 4 + 13 / 5 -> 6
    
    

    [题解]

    逆波兰表达式是更利于计算机运算的表达式形式, 需要用到栈(先进后出的数据结构). 遍历表达式:

    • 碰到数字则入栈
    • 碰到运算符则连续从栈中取出 2 个元素, 使用该运算符运算然后将结果入栈 最后栈中剩余一个数字, 就是结果.
    public class Solution {
        public int evalRPN(String[] tokens) {
            Stack<Integer> s = new Stack<Integer>();
            String operators = "+-*/";
            for (String token : tokens) {
                if (!operators.contains(token)) {
                    s.push(Integer.valueOf(token));
                    continue;
                }
    
                int a = s.pop();
                int b = s.pop();
                if (token.equals("+")) {
                    s.push(b + a);
                } else if(token.equals("-")) {
                    s.push(b - a);
                } else if(token.equals("*")) {
                    s.push(b * a);
                } else {
                    s.push(b / a);
                }
            }
            return s.pop();
        }
    }
    
    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1564 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:23 · PVG 00:23 · LAX 09:23 · JFK 12:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.