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的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-Basic Calculator-224

Arcgis中用raster calculator怎样 计算山的顶点,应怎样编写

线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:Calculator.main 中的 0(Calculator.java:25)[重复]

typescript 开发人员日记:第1天 - packages / server / src / calculator / calculator.ts

LeetcodeBasic Calculator

LeetcodeBasic Calculator II