From : https://leetcode.com/problems/basic-calculator/
mplement a basic calculator to evaluate a simple expression string.
The expression string may contain open (
and closing parentheses )
, the plus +
or minus sign -
, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2 " 2-1 + 2 " = 3 "(1+(4+5+2)-3)+(6+8)" = 23
Note: Do not use the eval
built-in library function.
class Solution {
public:
int calculate(string s) {
int len=s.size(), i=0;
stack<int> nums;
stack<char> ops;
while(i<len) {
while(i<len && s[i]==' ') i++;
if(i>=len) break;
char ch = s[i];
if(ch>='0' && ch<='9') {
int b = ch-'0';
i++;
while(i<len && s[i]>='0' && s[i]<='9') b = b*10+s[i++]-'0';
if(!ops.empty()){
char op = ops.top();
if(op=='-') {
ops.pop();
int a = nums.top();
nums.pop();
nums.push(a-b);
} else if(op=='+') {
ops.pop();
int a = nums.top();
nums.pop();
nums.push(a+b);
} else if(op=='(') {
nums.push(b);
}
} else {
nums.push(b);
}
} // if(ch>='0' && ch<='9')
else if(ch==')') {
ops.pop();
if(!ops.empty()) {
int b = nums.top();
nums.pop();
int a = nums.top();
nums.pop();
if(ops.top()=='+') {
nums.push(a+b);
} else {
nums.push(a-b);
}
ops.pop();
}
i++;
} else {
ops.push(ch);
i++;
}
}
return !nums.empty()?nums.top():0;
}
};