首页 > 代码库 > leetcode-Basic Calculator II-227

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