您的位置:首页 > 编程语言 > Lua

[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:

["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,不知道为什么,这个判断的函数应该更精准呀!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  algorithm leetcode