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

80_leetcode_Evaluate Reverse Polish Notation

2014-06-20 14:54 369 查看
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


1:注意特殊情况;2:设置堆栈,遇到数字字符串就直接进栈,遇到四则运算符号,堆栈最上层的两个元素出栈, 进行相应运算后再进栈;3:注意除数是0的情况

int evalRPN(vector<string> &tokens)
{
stack<int> myStack;
int size = (int)tokens.size();

for(int i = 0; i < size; i++)
{
if(isOperator(tokens[i]) == 0)
{
myStack.push(atoi(tokens[i].c_str()));
}
else
{
int firstNumber = myStack.top();
myStack.pop();
int secondNumber = myStack.top();
myStack.pop();
int result;
switch(isOperator(tokens[i]))
{
case 1:
result = firstNumber + secondNumber;
myStack.push(result);
break;
case 2:
result = secondNumber - firstNumber;
myStack.push(result);
break;
case 3:
result = secondNumber * firstNumber;
myStack.push(result);
break;
case 4:
if(firstNumber == 0)
{
myStack.push(0);
}
else
{
myStack.push(secondNumber / firstNumber);
}
break;
}
}
}

return myStack.top();
}

int isOperator(string &tokenStr)
{
if(tokenStr.size() != 1)
{
return 0;
}
else
{
if(tokenStr[0] == '+')
{
return 1;
}
else if(tokenStr[0] == '-')
{
return 2;
}
else if(tokenStr[0] == '*')
{
return 3;
}
else if(tokenStr[0] == '/')
{
return 4;
}
else
{
return 0;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息