当前位置:   article > 正文

Leetcode 227. 基本计算器 II_leetcode 计算器

leetcode 计算器

题目

在这里插入图片描述
Leetcode 227. 基本计算器 II

代码(首刷看解析)

这个题的解析用到了好多我不熟悉的函数

  • ·accumulate定义在#include中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理。
    累加求和:int sum = accumulate(vec.begin() , vec.end() , 42);
    accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。
    string sum = accumulate(v.begin() , v.end() , string(" "));

  • isdigit(char n):判断字符n是否在0~9

class Solution {
public:
    int calculate(string s) {
        int n = s.size();
        int num = 0;
        char preSign = '+';
        vector<int> stk;
        for(int i = 0; i < n; i++) {
            if(isdigit(s[i])) {
                num = num*10 + int(s[i]-'0');
            } 
            if (!isdigit(s[i]) && s[i] != ' ' || i == n - 1) {
                switch(preSign) {
                    case '+':
                        stk.push_back(num);
                        break;
                    case '-':
                        stk.push_back(-num);
                        break;
                    case '*':
                        stk.back() *= num;
                        break;
                    case '/':
                        stk.back() /= num;
                }
                preSign = s[i];
                num = 0;
            }
        }
        return accumulate(stk.begin(), stk.end(), 0);
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

代码(9.9 二刷看解析)

class Solution {
public:
    int calculate(string s) {
        int num = 0;
        char pre = '+';
        vector<int> v;
        for(int i = 0; i < s.size(); i++) {
            if(isdigit(s[i])) {
                num = num*10 + int(s[i]-'0');
            } 
            if((s[i] != ' ' && !isdigit(s[i])) || i == s.size()-1) {
                if(pre =='+') {
                    v.push_back(num);
                } else if(pre == '-') {
                    v.push_back(-num);
                } else if(pre == '*') {
                    v.back() *= num;
                } else {
                    v.back() /= num;
                }
                pre = s[i];
                num = 0;
            }
        }
        return accumulate(v.begin(), v.end(), 0);
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

代码(9.25 三刷看解析)

class Solution {
public:
    int calculate(string s) {
        int i = 0;
        vector<int> sk;
        int num = 0;
        char pre = '+'; // 第一个数是正的
        while(i < s.size()) {
            if(isdigit(s[i])) {
                num = num*10 + int(s[i]-'0');
            } 
            if((s[i] != ' ' && !isdigit(s[i])) || i == s.size()-1) {
                if(pre == '+') {
                    sk.push_back(num);
                } else if(pre == '-') {
                    sk.push_back(-num);
                } else if(pre == '*') {
                    sk.back() *= num;
                } else {
                    sk.back() /= num;
                }
                pre = s[i];
                num = 0;
            }
            i++;
        }
        return accumulate(sk.begin(), sk.end(), 0);
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/848219
推荐阅读
相关标签
  

闽ICP备14008679号