本文主要是介绍LeetCode : 150. Evaluate Reverse Polish Notation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
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(); }
}
这篇关于LeetCode : 150. Evaluate Reverse Polish Notation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!