题解 | 表达式求值
表达式求值
https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4
#include <cctype>
#include <functional>
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
vector<int> function(string s,int index)
{
int num=0;//数字转换的大小
char op = '+';//上一个运算符号,默认为加法,因为遇到数字时需要上一个运算符号来计算
int i;//字符串中的位置,记录从哪个位置开始遍历字符串
stack<int> stk;
for(i=index;i<s.size();i++)
{
if(isdigit(s[i]))
{
while(i!=s.size()&&isdigit(s[i]))
{
num=num*10 + s[i] - '0';
i++;
}
}
if(s[i]=='(')//右括号,把括号当做是一个整体int值
{
vector<int> vec=function(s,i+1);//右括号后面的位置为运算数字和符号的起始位置
num=vec[0];//括号的整体结果
i=vec[1];//从括号结束的下一个位置开始出发
if(i!=s.size()-1)
{
continue;
}
}
switch (op) {
case '+':
{
stk.push(num);
break;
}
case '-':
{
stk.push(-num);
break;
}
case '*':
{
int temp=stk.top();
stk.pop();
stk.push(temp*num);
break;
}
}
num=0;
if(s[i]==')')
{
break;//说明此时到了括号的结尾
}
else {
op=s[i];//记录上一次的运算符号
}
}
int sum=0;
while(!stk.empty())
{
sum+=stk.top();
stk.pop();
}
return vector<int> {sum, i};
}
int solve(string s) {
// write code here
return function(s,0)[0];
}
};
美的集团公司福利 814人发布
