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

牛的表达式计算器

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

  1. 题目考察的知识点

栈的先进后出性质

  1. 题目解答方法的文字分析

本题主要是后缀表达式,需要清楚的是,假如入栈的顺序是a,b,/,那么运算后,存进栈的内容是a/b。本算法主要是用哈希表set装载四个表达式,在遍历tokens数组时,将不在set里面的数字转化成Integer类型存进栈中stack,如果tokens数组的值为运算符,则从栈中取出两个值,进行运算,把运算结果再存进栈中。当遍历完tokens数组后,最后的答案就会存在栈中。

  1. 本题解析所用的编程语言

java

  1. 完整且正确的编程代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param tokens string字符串一维数组 
     * @return int整型
     */
    public int calculatePostfix (String[] tokens) {
        HashSet<String> set = new HashSet<>();
        set.add("+");
        set.add("-");
        set.add("*");
        set.add("/");
        Deque<Integer> stack = new LinkedList<>();
        int i=0;
        int len = tokens.length;
        while(i<len){
            if(!set.contains(tokens[i])){
                stack.push(Integer.parseInt(tokens[i]));
            }else if(tokens[i].equals("+")){
                int b=stack.pop();
                int a=stack.pop();
                stack.push(a+b);
            }else if(tokens[i].equals("-")){
                int b=stack.pop();
                int a=stack.pop();
                stack.push(a-b);
            }else if(tokens[i].equals("*")){
               int b=stack.pop();
                int a=stack.pop();
                stack.push(a*b);          
            }else if(tokens[i].equals("/")){
                int b=stack.pop();
                int a=stack.pop();
                int ans = a/b;
                stack.push(a/b);
            }
            i++;
        }
        return stack.pop();
    }
}
全部评论

相关推荐

11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
10-25 23:12
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务