Contents

leetcode 227. Basic Calculator II [Medium]

題目敘述

輸入算式的字串,返回解答。運算子只有 +, -, *, /,這題還沒有出現包含括號的情況。

解題紀錄

這次是直覺的用 stack 解出來,但是仔細思考過後發覺好像不一定要用 stack,可以用變數去存資料,之後待補XD

class Solution {
public:
    int calculate(string s) {
        long long int tmp;
        long long int num = 0;
        int len = s.size();
        
        stack<long long int> result;
        char op_code = '+';
        
        for (int i = 0; i < len; ++i) {
            if (isnumber(s[i])) {
                num = num * 10 + s[i] - '0';
            } 
            
            if (!isnumber(s[i]) && s[i] != ' ' || i == len-1) {
                switch (op_code) {
                    case '+':
                        result.push(num);
                        break;
                    case '-':
                        result.push(-num);
                        break;
                    case '*':
                        tmp = result.top() * num;
                        result.pop();
                        result.push(tmp);
                        break;
                    case '/':
                        tmp = result.top() / num; 
                        result.pop();
                        result.push(tmp);
                        break;
                }
                num = 0;
                op_code = s[i];
            }
        }
        
        while (!result.empty()) {
            num += result.top();
            result.pop();
        }
        return num;
    }
    
    bool isnumber(const char c) {
        return c >= '0' && c <= '9';
    }
};

#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
static auto _ = [] () {ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return 0;}();

執行時間:

https://i.imgur.com/Migh9eo.png

過幾天會補上不用 stack 的解答,目前還沒有想到比較漂亮的寫法QQ。