题目描述:
Implement 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 .
Example 1:
Input: "1 + 1"
Output: 2
Example 2:
Input: " 2-1 + 2 "
Output: 3
Example 3:
Input: "(1+(4+5+2)-3)+(6+8)"
Output: 23
Note:
• You may assume that the given expression is always valid.
- Do not use the eval built-in library function.
由于有括号,所以可以判断左括号和右括号的位置,调用递归解决,同时记录括号前的符号。
class Solution {
public:
int calculate(string s) {
char op='+';
int num=0;
int result=0;
stack<int> x;
int i=0;
while(i<s.size())
{
if(s[i]>='0'&&s[i]<='9')
{
num*=10;
num+=s[i]-'0';
}
else if(s[i]=='(')
{
int count=0;
int j=i;
for (;i<s.size();i++)
{
if(s[i]=='(') count++;
if(s[i]==')') count--;
if(count==0) break;
}
num=calculate(s.substr(j+1,i-j-1));
}
if(s[i]=='+'||s[i]=='-'||i==s.size()-1)
{
if(op=='+') x.push(num);
else if(op=='-') x.push(-num);
op = s[i];
num = 0;
}
i++;
}
while (!x.empty())
{
result+=x.top();
x.pop();
}
return result;
}
};
本文介绍了一种不使用内置eval函数的基本计算器实现方法,通过解析包含括号、加减运算符及空格的字符串表达式,利用递归和栈结构进行求值。示例包括直接加减和含括号的复杂表达式。
524

被折叠的 条评论
为什么被折叠?



