实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。
示例 1:
输入:s = "1 + 1"
输出:2
示例 2:
输入:s = " 2-1 + 2 "
输出:3
示例 3:
输入:s = "(1+(4+5+2)-3)+(6+8)"
输出:23
提示:
- 1 <=
s.length
<= 3 * 105 s
由数字、'+'、'-'、'('、')'、和
’` ’ 组成s
表示一个有效的表达式
思路:
1.设置标志位 sign
,加入括号前面为-
的话,则里面的数字都要变好,
2.符号栈
class Solution {
public:
int calculate(string s) {
stack<int>a; //符号栈
int ret=0; //结果
int sign=1; //标志位
a.push(1); //初始栈
int n=s.size();
int i=0;
while(i<n){
if(s[i]==' ') i++;
else if(s[i]=='+'){
sign=a.top();
i++;
}
else if(s[i]=='-'){
sign=-a.top();
i++;
}
else if(s[i]=='('){
a.push(sign);
i++;
}
else if(s[i]==')'){
a.pop();
i++;
}
else{
long long int sum=0;
while(i<n &&s[i]>='0' &&s[i]<='9'){ //如果数字不是个位数
sum=sum*10+s[i]-'0';
i++;
}
ret+=sign*sum; //sign = 1 or -1
}
}
return ret;
}
};