首页 > 学院 > 开发设计 > 正文

leetcode-150-Evaluate Reverse Polish Notation

2019-11-06 07:47:09
字体:
来源:转载
供稿:网友

问题

题目:[leetcode-150]

思路

典型栈的应用,后缀表达式计算。

枚举每一个token,对于每一个token执行如下操作:

如果是操作数,进栈如果是操作符,从操作数栈中弹出两个元素,进行计算,中间结果入操作数栈

最后操作数栈中的结果就是最终结果

代码

class Solution {public: int evalRPN(vector<string>& tokens) { int sz = tokens.size(); if(!sz) return 0; std::stack<int> opnd; int flag=0; for(int i = 0; i < sz; ++i){ if(flag=is_optr(tokens[i])){ // 操作符-弹出两操作数计算入栈 int right = opnd.top(); opnd.pop(); int left = opnd.top(); opnd.pop(); int tmp = cal_exp(flag, left, right); opnd.push(tmp); } else // 操作数-进栈 { int val = string_to_int(tokens[i]); opnd.push( val ); } } return opnd.top(); }PRivate: int string_to_int(const std::string& num){ std::stringstream ss; ss << num; int ret; ss >> ret; return ret; } int is_optr(const std::string& s){ if( s == "+" ) return 1; else if( s=="-" ) return 2; else if( s=="*" ) return 3; else if( s=="/" ) return 4; else return 0; } int cal_exp(int flag, int left, int right){ int ans = 0; switch(flag){ case 1 : ans = left + right;break; case 2 : ans = left - right;break; case 3 : ans = left * right;break; case 4 : ans = left / right;break; default : break; } return ans; }};
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表