题解 | #牛的表达式计算器# java
牛的表达式计算器
https://www.nowcoder.com/practice/261e7f01438f414c92f59c0059d3a906
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param tokens string字符串一维数组
* @return int整型
*/
public int calculatePostfix (String[] tokens) {
// write code here
Stack<Integer> stk = new Stack<>();
int number1 = 0;
int number2 = 0;
for (String p : tokens) {
if (!p.equals("+") && !p.equals("-") && !p.equals("*") && !p.equals("/")) {
stk.push(Integer.parseInt(p));
} else if (p.equals("+")) {
number1 = stk.pop();
number2 = stk.pop();
stk.push(number1 + number2);
} else if (p.equals("*")) {
number1 = stk.pop();
number2 = stk.pop();
stk.push(number1 * number2);
} else if (p.equals("/")) {
number1 = stk.pop();
number2 = stk.pop();
stk.push(number2 / number1);
} else if (p.equals("-")) {
number1 = stk.pop();
number2 = stk.pop();
stk.push(number2 - number1);
}
}
return stk.pop();
}
}
编程语言是Java。
该题考察的知识点包括:
- 使用堆栈数据结构进行后缀表达式的计算
- 字符串的拆分和判断
- 字符串转换为整数
代码的文字解释如下:
- 对于tokens中的每个字符串p,执行以下操作:如果p不是"+", "-", "*", "/"之一,将其转换为整数并压入堆栈stk。如果p是"+",从堆栈stk中弹出两个元素,将它们相加的结果压入堆栈stk。如果p是"*",从堆栈stk中弹出两个元素,将它们相乘的结果压入堆栈stk。如果p是"/",从堆栈stk中弹出两个元素,将第二个元素除以第一个元素的结果压入堆栈stk。如果p是"-",从堆栈stk中弹出两个元素,将第二个元素减去第一个元素的结果压入堆栈stk。
- 完成循环后,堆栈stk中剩余的唯一元素就是计算结果,将其返回。

