LeetCode 150 — Evaluate Reverse Polish Notation(C++ Java Python)
2014-03-01 15:34
543 查看
题目:http://oj.leetcode.com/problems/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.
Some examples:
题目翻译:
求逆波兰式算术表达式的值。
有效的运算符有+,-,*,/。每个操作数可以是整数或另一个表达式。
分析:
使用stack。注意python除法的特殊性,当结果为负数时向靠近-∞的方向取整。
C++实现:
Java实现:
Python实现:
感谢阅读,欢迎评论!
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are
+,
-,
*,
/.
Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
题目翻译:
求逆波兰式算术表达式的值。
有效的运算符有+,-,*,/。每个操作数可以是整数或另一个表达式。
分析:
使用stack。注意python除法的特殊性,当结果为负数时向靠近-∞的方向取整。
C++实现:
class Solution { public: int evalRPN(vector<string> &tokens) { std::stack<int> s; string operators = "+-*/"; int num1 = 0; int num2 = 0; for(int i = 0; i < tokens.size(); ++i) { int pos = operators.find(tokens[i]); if(pos == string::npos) { s.push(atoi(tokens[i].c_str())); } else { num2 = s.top(); s.pop(); num1 = s.top(); s.pop(); if(tokens[i] == "+") { s.push(num1 + num2); } else if(tokens[i] == "-") { s.push(num1 - num2); } else if(tokens[i] == "*") { s.push(num1 * num2); } else { if(num2 != 0) { s.push(num1 / num2); } } } } return s.top(); } };
Java实现:
public class Solution { public int evalRPN(String[] tokens) { String operators = "+-*/"; Stack<String> s = new Stack<String>(); for (String str : tokens) { if (operators.contains(str)) { int num2 = Integer.valueOf(s.pop()); int num1 = Integer.valueOf(s.pop()); int index = operators.indexOf(str); switch (index) { case 0: s.push(String.valueOf(num1 + num2)); break; case 1: s.push(String.valueOf(num1 - num2)); break; case 2: s.push(String.valueOf(num1 * num2)); break; case 3: s.push(String.valueOf(num1 / num2)); break; } } else { s.push(str); } } return Integer.valueOf(s.pop()); } }
Python实现:
class Solution: # @param tokens, a list of string # @return an integer def evalRPN(self, tokens): operators = "+-*/" stack = [] for s in tokens: if s in operators: num2 = int(stack.pop()) num1 = int(stack.pop()) if s == "+": num1 += num2 elif s == "-": num1 -= num2 elif s == "*": num1 *= num2 else: if num1 / num2 < 0 and num1 % num2 != 0: num1 = num1 / num2 + 1 else: num1 /= num2 stack.append(str(num1)) else: stack.append(s) return int(stack.pop())
感谢阅读,欢迎评论!
相关文章推荐
- Leetcode 150:Evaluate Reverse Polish Notation(计算逆波兰表达式) --java实现
- leetcode_c++:栈:Evaluate Reverse Polish Notation(150)
- 【LeetCode-面试算法经典-Java实现】【150-Evaluate Reverse Polish Notation(计算逆波兰式)】
- Java for LeetCode 150 Evaluate Reverse Polish Notation
- [leetcode-150]Evaluate Reverse Polish Notation(c++)
- [LeetCode]题解(python):150-Evaluate Reverse Polish Notation
- 【LeetCode with Python】 Evaluate Reverse Polish Notation
- leetcode[150]:Evaluate Reverse Polish Notation
- [C++]LeetCode: 98 Evaluate Reverse Polish Notation
- leetcode 150 —— Evaluate Reverse Polish Notation
- 【Leetcode-medium-150】Evaluate Reverse Polish Notation
- leetcode[150] Evaluate Reverse Polish Notation
- 【Leetcode】Evaluate Reverse Polish Notation JAVA
- [Leetcode 150, Medium] Evaluate Reverse Polish Notation
- leetcode-150-Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation leetcode java
- Evaluate Reverse Polish Notation leetcode java
- LeetCode 150 Evaluate Reverse Polish Notation
- LeetCode - 150 - Evaluate Reverse Polish Notation
- Leetcode-Evaluate Reverse Polish Notation-java