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栈顶元素作为计算结果。

京公网安备 11010502036488号