p154 简易计算器(leetcode 227)

一:解题思路

这道题可以采用先将字符串转为分离,然后将分离后的字符串转化为后缀表达式,最后根据后缀表达式再计算最后的结果。

也可以不采用上面的方法来做,直接按照下面的方法来做。Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

这道题目有三个关键点:

1.需要知道字符串转化为整数的公式:num = num * 10 + (s[p] - '0');

2.乘法和除法的优先级 比 加法和减法的 优先级要高,乘法和除法只更新:part

4.遇到空格就跳过。

 

C++:

class Solution {
public:
    int calculate(string s) 
    {
        int sum = 0;
        int part = 0;
        int p = 0;
        char op = '+';
        int n = s.length();

        while (p < n)
        {
            while (p < n && s[p] == ' ') p++;
            int num = 0;
            while (p < n && s[p] >= '0' && s[p] <= '9')
            {
                num = num * 10 + (s[p] - '0');
                p++;
            }

            if (op == '+')
            {
                sum += part;
                part = num;
            }
            else if (op == '-')
            {
                sum += part;
                part = -num;
            }
            else if (op == '*')
            {
                part *= num;
            }
            else
            {
                part /= num;
            }

            while (p < n && s[p] == ' ') p++;
            if (p < n) op = s[p++];
        }

        return sum + part;
    }
};

Java:

class Solution {
        public int calculate(String s)
        {
              int n=s.length();
              int p=0;
              int sum=0;
              int part=0;
              char op='+';

              while(p<n)
              {
                  while(p<n && s.charAt(p)==' ') p++;
                  int num=0;
                  while(p<n && s.charAt(p)>='0' && s.charAt(p)<='9')
                  {
                      num=num*10+s.charAt(p)-'0';
                      p++;
                  }

                  if(op=='+')
                  {
                      sum+=part;
                      part=num;
                  }
                  else if(op=='-')
                  {
                      sum+=part;
                      part=-num;
                  }
                  else if(op=='*')
                  {
                      part*=num;
                  }
                  else
                  {
                      part/=num;
                  }

                  while(p<n && s.charAt(p)==' ') p++;
                  if(p<n) op=s.charAt(p++);
              }

              return sum+part;
        }
    }

 

posted @ 2020-05-14 17:33  repinkply  阅读(197)  评论(0)    收藏  举报