公司域名注册后怎么建设网站,wordpress加载,镇江网站设计建设,网站设计与网页配色实例精讲pdf思路#xff1a;
step 1#xff1a;使用栈辅助处理优先级#xff0c;默认符号为加号。 step 2#xff1a;遍历字符串#xff0c;遇到数字#xff0c;则将连续的数字字符部分转化为int型数字。 step 3#xff1a;遇到左括号#xff0c;则将括号后的部分送入递归#x…
思路
step 1使用栈辅助处理优先级默认符号为加号。 step 2遍历字符串遇到数字则将连续的数字字符部分转化为int型数字。 step 3遇到左括号则将括号后的部分送入递归处理子问题遇到右括号代表已经到了这个子问题的结尾结束继续遍历字符串将子问题的加法部分相加为一个数字返回。 step 4当遇到符号的时候如果是得到的数字正常入栈如果是-则将其相反数入栈如果是*则将栈中内容弹出与后一个元素相乘再入栈。 step 5最后将栈中剩余的所有元素进行一次全部相加。
#include stack
#include vector
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定请勿修改直接返回方法规定的值即可** 返回表达式的值* param s string字符串 待计算的表达式* return int整型*/int calculate(string s) {// write code herereturn function(s, 0)[0];}vectorint function(string s,int index){stackintsk;long long num 0;char op ;int i;for(i index;is.size();i){if(s[i] ) continue;//如果当前为数字else if(s[i]0s[i]9){num num*10s[i]-0;//防止连续的数字if(i!s.length()-1s[i1]! ) continue;//如果为数字不执行下面的语句继续遍历,并且下一个字符不为空格}else if(s[i](){//遇到左括号从左括号开始第一个进行递归,并且下一个字符不为空格vectorint res function(s, i1);num res[0];//计算出括号中的计算值i res[1];//得出遍历的下标位置if(i!s.length()-1s[i1]! ) continue;//如果还没结束字符串则继续遍历}switch (op) {case :sk.push(num);break;case -:sk.push(0-num);break;case *:int temp sk.top();sk.pop();sk.push(temp*num);break;}num 0;if(s[i] )) break;//遇到右括号则递归结束else op s[i];}int sum 0;//计算栈中的所有值的和while (!sk.empty()) {sum sk.top();sk.pop();}return vectorint {sum,i};}
};