题解 | #牛的表达式计算器#
牛的表达式计算器
https://www.nowcoder.com/practice/261e7f01438f414c92f59c0059d3a906
- 题目考察的知识点
栈的先进后出性质
- 题目解答方法的文字分析
本题主要是后缀表达式,需要清楚的是,假如入栈的顺序是a,b,/,那么运算后,存进栈的内容是a/b。本算法主要是用哈希表set装载四个表达式,在遍历tokens数组时,将不在set里面的数字转化成Integer类型存进栈中stack,如果tokens数组的值为运算符,则从栈中取出两个值,进行运算,把运算结果再存进栈中。当遍历完tokens数组后,最后的答案就会存在栈中。
- 本题解析所用的编程语言
java
- 完整且正确的编程代码
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();
}
}