LintCode领扣 题解丨 BAT大厂面试高频题:逆波兰表达式求值-阿里云开发者社区

开发者社区> 算法编程> 正文

LintCode领扣 题解丨 BAT大厂面试高频题:逆波兰表达式求值

简介: LintCode领扣 题解丨 BAT大厂面试高频题:逆波兰表达式求值

求逆波兰表达式的值。

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

在线评测地址:
https://www.lintcode.com/problem/evaluate-reverse-polish-notation/?utm_source=sc-tianchi-sz0814

样例 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();
}

}
更多题解参见九章算法官网:
https://www.jiuzhang.com/solution/evaluate-reverse-polish-notation/?utm_source=sc-tianchi-sz0814

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
算法编程
使用钉钉扫一扫加入圈子
+ 订阅

开发者社区在线编程频道官方技术圈。包含算法资源更新,周赛动态,每日一题互动。

官方博客
链接