772. 基本計算器 III

題目
難度:困難
類型:遞歸 棧

class Solution {
public:
    int calculate(string s) {
       int j = 0;
        for(int i = 0; i < s.size(); ){
            while(i < s.size() && s[i]==' ') i++;
            while(i < s.size() && s[i] != ' ') s[j++] = s[i++];
            while(i < s.size() && s[i]==' ') i++;
        }
        int st = 0;
        s.erase(j);
        s+=' ';
        return helper(s, st);

    }
    int helper(string& s, int &i){
        long long num = 0, prev = 0, sum = 0;
        char prevOp = '+';
        while(i < s.size()){
            if(isdigit(s[i])) num = num*10-'0'+s[i++];
            else if(s[i]=='('){
                num = helper(s, ++i);
            }else{
                switch(prevOp){
                    case '+':
                        sum += prev;
                        prev = num;
                        break;
                    case '-':
                        sum +=prev;
                        prev = -num;
                        break;
                    case '*':
                        prev *= num;
                        break;
                    case '/':
                        prev/=num;
                        break;
                }
                if(s[i]==')'){
                    i++;
                    break;
                }
                prevOp = s[i];//操作符
                num = 0; //數字重置
                i++;
            }
        }
        return int(sum + prev);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章