您的位置:首页 > 其它

LeetCode之Basic Calculator II

2015-09-09 09:40 423 查看
/*用两个辅助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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: