[LeetCode] Evaluate Reverse Polish Notation
2014-04-03 19:43
423 查看
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:
问题描述:给定一个逆波兰式,对这个逆波兰式求值。
问题应该是很简单的,用栈嘛,记得学栈的时候,逆波兰式还是栈的典型应用呢!
遍历字符串向量,当当前字符串是整数时就将整数存到栈中,如果当前字符串是操作符就弹出栈顶的两个元素,然后进行计算,将结果再存到栈中,直到结束。
中间判断遍历的字符串是否是数字的表达式:isdigit((*iter)[0]) || iter->size() > 0是看别人的,开始我用的是isdigit((*iter)[0]),但是不能正常的判断负数,就自己写了一个函数用来判断给定的字符串是否是整数:
不过这样会导致Runtime Error,不知道为什么,这个判断的函数应该更精准呀!
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
问题描述:给定一个逆波兰式,对这个逆波兰式求值。
问题应该是很简单的,用栈嘛,记得学栈的时候,逆波兰式还是栈的典型应用呢!
遍历字符串向量,当当前字符串是整数时就将整数存到栈中,如果当前字符串是操作符就弹出栈顶的两个元素,然后进行计算,将结果再存到栈中,直到结束。
class Solution { public: int cal(int l, int r, char op) { switch(op) { case '+': return l + r; case '-': return l - r; case '*': return l * r; case '/': return l / r; default: return -1; } } int evalRPN(vector<string> &tokens) { stack<int> data; vector<string>::iterator iter = tokens.begin(); while(iter != tokens.end()) { if(isdigit((*iter)[0]) || iter->size() > 1) { data.push(atoi(iter->c_str())); } else { int r = data.top(); data.pop(); int l = data.top(); data.pop(); int res = cal(l, r, (*iter)[0]); data.push(res); } ++iter; } if(!data.empty()) return data.top(); else return -1; } };
中间判断遍历的字符串是否是数字的表达式:isdigit((*iter)[0]) || iter->size() > 0是看别人的,开始我用的是isdigit((*iter)[0]),但是不能正常的判断负数,就自己写了一个函数用来判断给定的字符串是否是整数:
bool isdata(string str) { string::iterator iter = str.begin(); if(*iter == '-') { ++iter; } while(iter != str.end() && isdigit(*iter)) ++iter; if(iter == str.end()) { return true; } else { return false; } }
不过这样会导致Runtime Error,不知道为什么,这个判断的函数应该更精准呀!
相关文章推荐
- 【LeetCode】-Evaluate Reverse Polish Notation
- leetcode-Evaluate Reverse Polish Notation
- [LeetCode]Evaluate Reverse Polish Notation
- [leetcode] 150. Evaluate Reverse Polish Notation
- leetcode---Evaluate Reverse Polish Notation
- Leetcode: Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation:from LeetCode
- LeetCode Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation leetcode java
- Leetcode-Evaluate Reverse Polish Notation-java
- LeetCode:Evaluate Reverse Polish Notation
- leetcode_150 Evaluate Reverse Polish Notation
- [LeetCode 第4题] -- Evaluate Reverse Polish Notation
- LeetCode——150. Evaluate Reverse Polish Notation
- 【leetcode】Evaluate Reverse Polish Notation
- leetcode150 Evaluate Reverse Polish Notation
- LeetCode 2 Evaluate Reverse Polish Notation
- LeetCode – Refresh – Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation | leetcode
- LeetCode-Evaluate Reverse Polish Notation