文章目录
题目链接:
题目描述:

解法
表达式求值,一般是用栈来模拟计算过程。
C++ 算法代码:
cpp
class Solution
{
public:
int calculate(string s)
{
// 简单计算器算法
// 基本思路:使用栈处理表达式,遵循运算符优先级规则
vector<int> st; // 用数组来模拟栈结构,存储操作数和计算结果
int i = 0, n = s.size(); // i是当前处理的位置,n是字符串长度
char op = '+'; // 初始运算符设为加号,用于处理第一个数
while(i < n)
{
if(s[i] == ' ')
i++; // 跳过空格
else if(s[i] >= '0' && s[i] <= '9') // 遇到数字
{
// 提取完整的多位数字
int tmp = 0;
while(i < n && s[i] >= '0' && s[i] <= '9')
tmp = tmp * 10 + (s[i++] - '0');
// 根据之前的运算符进行相应操作
if(op == '+')
st.push_back(tmp); // 加法:将数字入栈
else if(op == '-')
st.push_back(-tmp); // 减法:将负数入栈
else if(op == '*')
st.back() *= tmp; // 乘法:将栈顶元素与当前数相乘
else
st.back() /= tmp; // 除法:将栈顶元素除以当前数
}
else // 遇到运算符
{
op = s[i]; // 记录当前运算符,用于处理下一个数
i++;
}
}
// 计算最终结果:将栈中所有数相加
int ret = 0;
for(auto x : st) ret += x;
return ret;
}
};