首页 > 代码库 > Evaluate Reverse Polish Notation (5)
Evaluate Reverse Polish Notation (5)
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;
这个问题是个后缀表达式问题,用stack堆栈来解决最简单有效。遇到数就将其压入堆栈,遇到运算符号就从栈顶取出两个数字参与运算。但是,要注意一个问题,每次弹出的两个数,其正确的运算顺序应该是后弹出的数在前,先弹出的数在后。举例说明:
0 3 /
弹出的时候是3先弹出,0次之,本来是0/3,如果没有按照正确的顺序,就变成了3/0,程序就会因为出现严重错误而崩溃了!
感觉这个题目很简单,但是因为上述的问题搞了很久才弄好,在编程之前,一定要多思考再动手!
贴出代码:
1 int istoken(string s){ 2 if(s.compare("+")==0) 3 return 1; 4 if(s.compare("-")==0) 5 return 2; 6 if(s.compare("*")==0) 7 return 3; 8 if(s.compare("/")==0) 9 return 4;10 return -1;11 }//不同的返回值对应不同的情况12 int transform(string s){13 return atoi(s.c_str());//将string转换为int14 }15 class Solution {16 public:17 int evalRPN(vector<string> &tokens) {18 int len=tokens.size();19 int i;20 stack<int>end;21 for(i=0;i<len;i++){22 if(istoken(tokens[i])==-1){//将数压入堆栈23 end.push(transform(tokens[i]));24 }25 else{26 int n1=end.top();27 end.pop();28 int n2=end.top();29 end.pop();//这里n1,n2交换了顺序30 switch(istoken(tokens[i])){31 case 1:{n1+=n2;break;}32 case 2:{n1-=n2;break;}33 case 3:{n1*=n2;break;}34 case 4:{n1/=n2;break;}35 }36 end.push(n1);37 }38 39 }40 return end.top();41 }42 };
Evaluate Reverse Polish Notation (5)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。