首页 > 代码库 > Evaluate Reverse Polish Notation
Evaluate Reverse Polish Notation
Catalogue:string-类型转换
Question
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
First try
class Solution { public: int evalRPN(vector<string> &tokens) { int operant1; int operant2; string str; int ret; bool firstOp = false; for(int i = 0; i < tokens.size(); i++) { str = tokens[i]; if(!firstOp) { operant1 = getInt(str);; firstOp = true; } else if(str == "+") { ret = operant1 + operant2; } else if(str == "-") { ret = operant1 - operant2; } else if(str == "*") { ret = operant1 * operant2; } else if(str == "/") { ret = operant1 / operant2; } else { operant2 = getInt(str); firstOp = false; } } return ret; } int getInt(string str) { int ret = 0; for(int i = 0; i < str.length(); i++) { ret = ret*10 + str[i]; } return ret; } };
Second try
考虑只有一个操作数的情况
class Solution { public: int evalRPN(vector<string> &tokens) { int operant1; int operant2; string str; int ret; bool firstOp = false; for(int i = 0; i < tokens.size(); i++) { str = tokens[i]; if(!firstOp) { operant1 = getInt(str); firstOp = true; } else if(str == "+") { operant1 += operant2; } else if(str == "-") { operant1 -= operant2; } else if(str == "*") { operant1 *= operant2; } else if(str == "/") { operant1 /= operant2; } else { operant2 = getInt(str); } } return operant1; } int getInt(string str) { int ret = 0; for(int i = 0; i < str.length(); i++) { ret = ret*10 + (str[i]-'0'); } return ret; } };Result:Wrong
Input: ["3","-4","+"]
Output: -23
Expected: -1
Third try
考虑负数的情况
class Solution { public: int evalRPN(vector<string> &tokens) { int operant1; int operant2; int ret; string str; stack<int> operantStack; for(int i = 0; i < tokens.size(); i++) { str = tokens[i]; if(str == "+") { operant2 = operantStack.top(); operantStack.pop(); operant1 = operantStack.top(); operantStack.pop(); operantStack.push(operant1 + operant2); } else if(str == "-") { operant2 = operantStack.top(); operantStack.pop(); operant1 = operantStack.top(); operantStack.pop(); operantStack.push(operant1 - operant2); } else if(str == "*") { operant2 = operantStack.top(); operantStack.pop(); operant1 = operantStack.top(); operantStack.pop(); operantStack.push(operant1 * operant2); } else if(str == "/") { operant2 = operantStack.top(); operantStack.pop(); operant1 = operantStack.top(); operantStack.pop(); operantStack.push(operant1 / operant2); } else { operantStack.push(getInt(str)); } } return operantStack.top(); } int getInt(string str) { int ret = 0; bool negFlag = false; for(int i = 0; i < str.length(); i++) { if(str[i]=='-') negFlag = true; else if(negFlag) { ret = ret*10 - (str[i]-'0'); } else { ret = ret*10 + (str[i]-'0'); } } return ret; } };Result: Accepted
Fourth try
使用内置函数atoi将string转换成int
class Solution { public: int evalRPN(vector< string > &tokens) { stack< int > operandStack; int operand1; int operand2; for(int i = 0; i < tokens.size(); i++){ if(tokens[i]=="+"){ operand1 = operandStack.top(); operandStack.pop(); operand2 = operandStack.top(); operandStack.pop(); operand2 += operand1; operandStack.push(operand2); } else if(tokens[i]=="-"){ operand1 = operandStack.top(); operandStack.pop(); operand2 = operandStack.top(); operandStack.pop(); operand2 -= operand1; operandStack.push(operand2); } else if(tokens[i]=="*"){ operand1 = operandStack.top(); operandStack.pop(); operand2 = operandStack.top(); operandStack.pop(); operand2 *= operand1; operandStack.push(operand2); } else if(tokens[i]=="/"){ operand1 = operandStack.top(); operandStack.pop(); operand2 = operandStack.top(); operandStack.pop(); operand2 /= operand1; operandStack.push(operand2); } else{ operand1 = atoi(tokens[i].c_str()); operandStack.push(operand1); } } return operandStack.top(); } };
Evaluate Reverse Polish Notation
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。