题解 | 表达式求值
表达式求值
https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4?tpId=383&tqId=1076787&channelPut=tracker1
#include <vector>
#include <stack>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
vector<int> function(string s1, int index){
int num = 0;
char op = '+';//默认加法,使得一开始入栈的数字就是以原来形式进入
stack<int> a;// a栈用于存储数字
int i ;
for (i = index; i< s1.size(); i++) {
if (isdigit(s1[i])) {
num = num * 10 + s1[i] - '0';
if (i != s1.size()-1) {//如果i=size-1时还continue,那就会错过后面的将num压入栈中
continue;//直接检索下一个是否也是数字
}
}
if (s1[i] == '(') { // 将进入内层递归计算
num = function(s1,i+1)[0];
i = function(s1,i+1)[1]; //s1[i] == ')',之后i就会+1了,正好指向新的数字
if (i != s1.size()-1) {
continue;// 等于size-1时,这个时候不能continue,这个时候得到下面,进行入栈操作
}
}
switch (op) {
case '+':{
a.push(num);
break;
}
case '-':{
a.push(-num);
break;
}
case '*':{
int result = num * a.top();
a.pop();
a.push(result);
break;
}
}
num = 0;
if (s1[i] == ')') {
break;
}
else {// s1[i]= + - *
op = s1[i];
}
}
int summ = 0;
while (!a.empty()) {
summ += a.top();
a.pop();
}
return {summ, i};
}
int solve(string s) {
// write code here
//括号内的数字要先算,比*优先级还高,可以设置递归,遇到(就进入下一层函数,在内层函数里把括号内的值算出来
return function(s, 0)[0];//return只能返回一个变量,取vector function第一个元素summ
}
};
查看11道真题和解析
OPPO公司福利 1101人发布