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

Evaluate Reverse Polish Notation

2014-02-24 22:26 232 查看
题目描述:

EvaluatethevalueofanarithmeticexpressioninReversePolishNotation.

Validoperatorsare
+
,
-
,
*
,
/
.Eachoperandmaybeanintegeroranotherexpression.

Someexamples:

["2","1","+","3","*"]->((2+1)*3)->9
["4","13","5","/","+"]->(4+(13/5))->6

分析:这一题就是中缀算术表达式求值运算。最经典的方法就是利用栈来解决这个问题。我们使用一个“辅助栈”来保存遍历到的操作数,当遇到操作符的时候,就从栈中pop出两个元素,进行计算,然后将结果push至“辅助栈”中,然后继续遍历。同时注意边界条件的判断,当这个表达式只有一个时输出是什么,当除法的被除数为0时,是怎么样的情况,都需要进行判断,然而这道题编译的时候没有考虑被除数为0的情况,但是面试的时候一定要注意边界条件的判断,这是面试官考察你考虑问题完不完全。


classSolution{
public:
intevalRPN(vector<string>&tokens){
if(tokens.size()==1)
{
vector<string>::iteratoriter=tokens.begin();
returnatoi(iter->c_str());
}
stack<int>numbers;
vector<string>::iteratoriter=tokens.begin();
intnum1=0,num2=0;
for(;iter!=tokens.end();++iter)
{
if(*iter=="+"||*iter=="-"||*iter=="/"||*iter=="*")
{
num1=numbers.top();
numbers.pop();
num2=numbers.top();
numbers.pop();
if(*iter=="+")
numbers.push(num2+num1);
elseif(*iter=="-")
numbers.push(num2-num1);
elseif(*iter=="*")
numbers.push(num2*num1);
elseif(*iter=="/")
{
numbers.push(num2/num1);
}
}
else
numbers.push(atoi(iter->c_str()));
}
returnnumbers.top();
}
};


Python语言实现,道理都是一样的:


classSolution:
#@paramtokens,alistofstring
#@returnaninteger
defevalRPN(self,tokens):
numbers=[]
fornumberintokens:
ifnumbernotin["+","-","*","/"]:
numbers.append(int(number))
elifnumberin["+","-","*","/"]:
num1=numbers.pop()
num2=numbers.pop()
ifnumber=="+":
numbers.append(num1+num2)
elifnumber=="-":
numbers.append(num2-num1)
elifnumber=="*":
numbers.append(num2*num1)
elifnumber=="/":
numbers.append(int(num2/float(num1)))
returnint(numbers.pop())





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: