import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param tokens string字符串一维数组 * @return int整型 */ public int calculatePostfix (String[] tokens) { // write code here Stack<Integer> num = new Stack<>(); int n = tokens.length; int i = 0; while (i < n) { if (tokens[i].equals("+")) { int a = num.pop(); int b = num.pop(); int tmp = a + b; num.push(tmp); } else if (tokens[i].equals("-")) { int a = num.pop(); int b = num.pop(); int tmp = b - a; num.push(tmp); } else if (tokens[i].equals("*")) { int a = num.pop(); int b = num.pop(); int tmp = a * b; num.push(tmp); } else if (tokens[i].equals("/")) { int a = num.pop(); int b = num.pop(); int tmp = b / a; num.push(tmp); } else { num.push(Integer.parseInt(tokens[i])); } i++; } return num.pop(); } }
该代码使用的编程语言是Java。
该题考察的知识点是利用栈(Stack)数据结构实现后缀表达式的计算。后缀表达式是一种不含括号的数学表达式,例如 "2 3 +" 表示 2 + 3。需要遍历给定的字符串数组 tokens,根据运算符进行相应的计算,并将结果压入栈中,最后返回栈顶元素即可。
具体的代码解释如下:
- 创建两个栈,
num
用于存储操作数,op
用于存储运算符。 - 初始化变量
n
为字符串数组tokens
的长度,初始化变量i
为0,作为循环的索引。 - 进入循环,判断当前
tokens[i]
是否为运算符。如果是 "+" 运算符,则从 num 栈中弹出两个操作数,并进行相加,将结果压入 num 栈中。如果是 "-" 运算符,则从 num 栈中弹出两个操作数,后弹出的减去先弹出的,将结果压入 num 栈中。如果是 "*" 运算符,则从 num 栈中弹出两个操作数,并进行相乘,将结果压入 num 栈中。如果是 "/" 运算符,则从 num 栈中弹出两个操作数,后弹出的除以先弹出的,将结果压入 num 栈中。如果不是运算符,则将 tokens[i] 转为整数,并将其压入 num 栈中。 - 循环结束后,返回
num
栈顶元素作为计算结果。