LeetCode | Evaluate Reverse Polish Notation(逆波蘭式求值)
阿新 • • 發佈:2019-02-13
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
題目解析:
//被除數為0 //有負數的情況 class Solution { public: int evalRPN(vector<string> &tokens) { if(tokens.size() == 0) return 0; stack<int> integer; for(int i = 0;i < tokens.size();i++){ if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "/" || tokens[i] == "*"){ int b = integer.top(); integer.pop(); int a = integer.top(); integer.pop(); if(tokens[i] == "+") integer.push(a+b); else if(tokens[i] == "-") integer.push(a-b); else if(tokens[i] == "/"){ if(b == 0) return 0; integer.push(a/b); } else integer.push(a*b); }else{ int num = StrToNum(tokens[i]); integer.push(num); } } return integer.top(); } int StrToNum(string s){ int len = s.size(); int num = 0; if(s[0] == '-'){ for(int i = 1;i < len;i++) num = num*10 + (s[i]-'0'); return 0-num; } for(int i = 0;i < len;i++) num = num*10 + (s[i]-'0'); return num; } };
字串轉化為數字,可以利用系統函式stoi(s)。
class Solution { public: int evalRPN(vector<string> &tokens) { if(tokens.size() == 0) return 0; stack<int> integer; for(int i = 0;i < tokens.size();i++){ if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "/" || tokens[i] == "*"){ int b = integer.top(); integer.pop(); int a = integer.top(); integer.pop(); if(tokens[i] == "+") integer.push(a+b); else if(tokens[i] == "-") integer.push(a-b); else if(tokens[i] == "/") integer.push(a/b); else integer.push(a*b); }else{ integer.push(stoi(tokens[i])); } } return integer.top(); } };