题解 | #牛的表达式计算器#

牛的表达式计算器

https://www.nowcoder.com/practice/261e7f01438f414c92f59c0059d3a906

知识点:栈

后缀表达式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用械实现求值。对于表达式x:=(a+b)*(c+d),其后缀式为xab+cd+*:=。

若想对后缀表示式进行运算,需要使用到栈,若遍历到数字,则将其推入栈中,若遍历到表达式,则将栈中的两个数字推出,进行运算后将结果再推入栈,最终栈内的元素即为运算结果。

在遇到-和/两个运算符时,需要注意数字的运算顺序,第一个推出栈的数字要作为被减数或者被除数。

Java题解如下:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param tokens string字符串一维数组 
     * @return int整型
     */
    public int calculatePostfix (String[] tokens) {
        // write code here
        Deque<Integer> stack = new ArrayDeque<>();
        for(String token: tokens) {
            Integer res = 0;
            if(token.equals("+")) {
                res = stack.pop() + stack.pop();
            }else if(token.equals("-")) {
                int digit = stack.pop();
                res = stack.pop() - digit;
            }else if(token.equals("*")) {
                res = stack.pop() * stack.pop();
            }else if(token.equals("/")) {
                int digit = stack.pop();
                res = stack.pop() / digit;
            }else {
                res = Integer.parseInt(token);
            }
            stack.push(res);
        }
        return stack.peek();
    }
}

全部评论

相关推荐

牛客604067584号:我9月初投递10月入池,泡到现在。hr全部离职,当然没离职的时候也联系不上。我发邮件给campus也不回我
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务