给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。Java完整代码
时间: 2024-09-23 11:15:06 浏览: 42
在Java中,你可以使用栈(Stack)数据结构来解决这个问题,因为逆波兰表示法(也称为后缀表示法)非常适合用栈来解析。下面是一个完整的Java代码示例,它实现了这个功能:
```java
import java.util.Stack;
public class Solution {
public int calculate(String tokens) {
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < tokens.length(); ) {
if (isNumber(tokens.charAt(i))) { // 检查字符是否为数字
int num = 0;
while (i < tokens.length() && isNumber(tokens.charAt(i))) {
num = num * 10 + (tokens.charAt(i) - '0');
i++;
}
stack.push(num);
} else if (tokens.charAt(i) == '+') { // 加法操作
int b = stack.pop();
int a = stack.pop();
stack.push(a + b);
i++;
} else if (tokens.charAt(i) == '-') { // 减法操作
int b = stack.pop();
int a = stack.pop();
stack.push(a - b);
i++;
} else if (tokens.charAt(i) == '*') { // 乘法操作
int b = stack.pop();
int a = stack.pop();
stack.push(a * b);
i++;
} else if (tokens.charAt(i) == '/') { // 除法操作
int b = stack.pop();
int a = stack.pop();
stack.push(a / b);
i++;
} else {
i++; // 非数字字符直接跳过
}
}
return stack.pop(); // 返回栈顶的结果
}
private boolean isNumber(char c) {
return c >= '0' && c <= '9';
}
}
```
这段代码遍历输入的tokens,遇到数字就压入栈,遇到运算符则弹出栈顶的两个元素进行相应的计算,并把结果压回栈。最后,栈中只剩下一个元素就是最终的答案。
阅读全文