LeetCode之Basic Calculator II

来源:互联网 发布:java圆类返回值 编辑:程序博客网 时间:2024/05/21 18:36
/*用两个辅助vector来进行运算,一个存符号,一个存数字。*/class Solution {public:    int calculate(string s) {        if(s.empty()) return 0;        vector<char> op;        vector<int> num;        for(size_t i = 0; i < s.size();){            if(s[i] >= '0' && s[i] <= '9'){//遍历到数字                int tmp = 0;                while(i < s.size() && s[i] >= '0' && s[i] <= '9'){                    tmp = tmp * 10 + (s[i] - '0');                    ++i;                }                if(!op.empty() && (op.back() == '*' || op.back() == '/')){                    int a = num.back();                    num.pop_back();                    num.push_back(calculate(a, tmp, op.back()));                    op.pop_back();                }                else num.push_back(tmp);            }            else if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/'){//遇到号,入栈                op.push_back(s[i]);                ++i;            }            else ++i;        }        size_t j = 0;        for(size_t i = 0; i < op.size(); ++i){            num[j+1] = calculate(num[j], num[j+1], op[i]);            ++j;        }        return num.back();    }        int calculate(int a, int b, char op){        if(op == '+') return a + b;        else if(op == '-') return a - b;        else if(op == '*') return a * b;        else return a / b;    }};

0 0
原创粉丝点击