关闭

LeetCode之Evaluate Reverse Polish Notation

186人阅读 评论(0) 收藏 举报
分类:
/*用栈模拟后缀表达式的求值过程。遍历字符串的容器:
1.遇到符号,将栈里面最上面的两个数字出栈进行符号表示的相应计算,并将结果入栈。
2.遇到数字,将数字入栈。
3.最后,栈顶元素即表达式的结果。*/
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        if(tokens.empty()) return 0; 
        stack<int> nums;
        for(int i = 0; i < tokens.size(); ++i){
            if(tokens[i] == "+" || tokens[i] == "-"
            || tokens[i] == "*" || tokens[i] == "/"){
                int b = nums.top();
                nums.pop();
                int a = nums.top();
                nums.pop();
                if(tokens[i] == "+"){
                    a += b;
                    nums.push(a);
                }
                else if(tokens[i] == "-"){
                    a -= b;
                    nums.push(a);
                }
                else if(tokens[i] == "*"){
                    a *= b;
                    nums.push(a);
                }
                else if(tokens[i] == "/"){
                    a /= b;
                    nums.push(a);
                }
            }
            else nums.push(string2num(tokens[i]));
        }
        return nums.top();
    }
    
    int string2num(const string &s){
        int res(0);
        int sign(1);
        int i(0);
        while(i < s.size()){
            if(s[i] == '-') sign = -1;
            else if(s[i] == '+') sign = 1;
            else res = res * 10 + s[i] - '0';
            ++i;
        }
        return res * sign;
    }
};

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43557次
    • 积分:1746
    • 等级:
    • 排名:千里之外
    • 原创:125篇
    • 转载:68篇
    • 译文:1篇
    • 评论:0条