首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。