题目
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Note:
Division between two integers should truncate toward zero.
The given RPN expression is always valid. That means the expression would always evaluate to a result and there won’t be any divide by zero operation.
Example 1:
Input: ["2", "1", "+", "3", "*"]
Output: 9
Explanation: ((2 + 1) * 3) = 9
就是简单的栈使用,其中需要注意的点就是,字符串怎么判断是不是数字,和将结果也压入栈中
方法一: .charAt(i)
,判断字符串的每一个字符是不是数字
方法二:Integer.parseInt(tokens[i])
直接强制字符串转数字
方法三: Integer.valueOf(tokens[i])
,也是直接转
然后用也可以尝试:try catch
try{
int num = Integer.parseInt(tokens[i]);
stack.add(num);
}catch (Exception e) {
int b = stack.pop();
int a = stack.pop();
stack.add(get(a, b, tokens[i]));
}
解决代码
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<Integer>();
int len = tokens.length;
int ans = 0;
for(int i = 0;i < len; i++){
switch (tokens[i]){
case "+": ans = Integer.valueOf(stack.pop()) + Integer.valueOf(stack.pop());stack.push(ans);break;
case "-":
{
int temp = Integer.valueOf(stack.pop());
ans = (Integer.valueOf(stack.pop()-temp));
stack.push(ans);
}break;
case "*": ans = (Integer.valueOf(stack.pop()) * Integer.valueOf(stack.pop()));stack.push(ans);break;
case "/":
{
int temp = Integer.valueOf(stack.pop());
ans = (Integer.valueOf(stack.pop()/temp));
stack.push(ans);
}break;
default: stack.push(Integer.valueOf(tokens[i]));break;
}
}
return stack.pop();
}
}