题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
vector<int> function(string s, int index){
stack<int> stack;
int num = 0;
char op = '+';
int i;
for(i = index; i < s.length(); i++){
//数字转换成int数字
if(isdigit(s[i])){
num = num * 10 + s[i] - '0';
if(i != s.length() - 1)
continue;
}
//碰到'('时,把整个括号内的当成一个数字处理
if(s[i] == '('){
//递归处理括号
vector<int> res = function(s, i + 1);
num = res[0];
i = res[1];
if(i != s.length() - 1)
continue;
}
switch(op){
//加减号先入栈
case '+':
stack.push(num);
break;
case '-':
//相反数
stack.push(-num);
break;
//优先计算乘号
case '*':
int temp = stack.top();
stack.pop();
stack.push(temp * num);
break;
}
num = 0;
//右括号结束递归
if(s[i] == ')')
break;
else
op = s[i];
}
int sum = 0;
//栈中元素相加
while(!stack.empty()){
sum += stack.top();
stack.pop();
}
return vector<int> {sum, i};
// stack<int> stack;
// int num = 0;
// char op = '+';
// int i;
// for(int i = index; i < s.length(); i++){
// // 数字转换成int数字
// if(isdigit(s[i])){
// num = num * 10 + s[i] - '0';
// if(i != s.length() - 1)
// continue;
// }
// // 碰到'('时,把整个括号内的内容当成一个数字处理
// if(s[i] == '('){
// // 递归处理括号
// vector<int> res = function(s, i + 1);
// num = res[0];
// i = res[1];
// if(i != s.length() - 1)
// continue;
// }
// switch(op){
// // 加减号先入栈
// case '+':
// stack.push(num);
// break;
// case '-':
// // 相反数
// stack.push(-num);
// break;
// // 优先计算乘号
// case '*':
// int temp = stack.top();
// stack.pop();
// stack.push(temp * num);
// break;
// }
// num = 0;
// // 右括号结束递归
// if(s[i] == ')')
// break;
// else
// op = s[i];
// }
// int sum = 0;
// // 栈中元素相加
// while(!stack.empty()){
// sum += stack.top();
// stack.pop();
// }
// return vector<int> {sum, i};
}
int solve(string s) {
return function(s, 0)[0];
}
};
没搞懂~~~

查看15道真题和解析
腾讯云智研发成长空间 229人发布