leetcode-Basic Calculator II-227
Posted 0_summer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-Basic Calculator II-227相关的知识,希望对你有一定的参考价值。
和上题差不多http://www.cnblogs.com/0summer/p/5837634.html
输入一个字符串,代表一个表达式,包含的运算符有+,-,*,/
本题没有包括括号,我的做法是把数字和+或者-压栈,继续遍历,如果遇到*或者/取出栈顶的数字和*或者/之后的数字进行计算然后再压栈,最后栈中剩下的就是所有+或者-表达式,再顺序计算一遍即可。
注释输入的字符串可能包含空格,要处理下
1 class Solution { 2 public: 3 int calculate(string s) { 4 int len=s.size(); 5 if(len==0) return 0; 6 stack<int> st; 7 int i=0; 8 int flag=1; 9 while(i<len){ 10 if(s[i]==\' \'){ 11 i++; 12 continue; 13 } 14 if(s[i]==\'+\'){ 15 flag=1; 16 st.push(flag); 17 } 18 else if(s[i]==\'-\'){ 19 flag=-1; 20 st.push(flag); 21 } 22 else if(s[i]==\'*\'||s[i]==\'/\'){ 23 char c=s[i]; 24 i++; 25 int num=0; 26 while(i<len&&s[i]==\' \') i++; 27 while(i<len&&isdigit(s[i])){ 28 num=num*10+s[i]-\'0\'; 29 i++; 30 } 31 int tmp=st.top(); 32 st.pop(); 33 if(c==\'*\') tmp*=num; 34 else tmp/=num; 35 st.push(tmp); 36 continue; 37 } 38 else if(isdigit(s[i])){ 39 int num=0; 40 while(i<len&&isdigit(s[i])){ 41 num=num*10+s[i]-\'0\'; 42 i++; 43 } 44 st.push(num); 45 continue; 46 } 47 i++; 48 } 49 int cnt=0; 50 vector<int> ans; 51 while(!st.empty()){ 52 cnt++; 53 ans.push_back(st.top()); 54 st.pop(); 55 } 56 int ret=ans[cnt-1]; 57 i=cnt-2; 58 while(i>0){ 59 ret+=ans[i]*ans[i-1]; 60 i-=2; 61 } 62 return ret; 63 } 64 };
以上是关于leetcode-Basic Calculator II-227的主要内容,如果未能解决你的问题,请参考以下文章
Arcgis中用raster calculator怎样 计算山的顶点,应怎样编写
线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:Calculator.main 中的 0(Calculator.java:25)[重复]
typescript 开发人员日记:第1天 - packages / server / src / calculator / calculator.ts