【LeetCode】224. Basic Calculator

來源:互聯網
上載者:User

標籤:

Basic Calculator

Implement a basic calculator to evaluate a simple expression string.

The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .

You may assume that the given expression is always valid.

Some examples:

"1 + 1" = 2" 2-1 + 2 " = 3"(1+(4+5+2)-3)+(6+8)" = 23

 

Note: Do not use the eval built-in library function.

 

兩個要點:

1、無括弧時,順序執行

2、有括弧時,先執行括弧中的

兩個棧:

一個存放運算元,每次進棧要注意,如果操作符棧頂元素為‘+‘/‘-‘,則需要立即計算。

一個存放操作符(包括括弧),每次出現‘)‘時,不斷進行出棧計算再進棧,直到彈出‘(‘,說明當前括弧內計算完畢。

class Solution {public:    int calculate(string s) {        stack<int> num;        stack<int> op;        int i = 0;        while(i < s.size())        {            while(i < s.size() && s[i] == ‘ ‘)                i ++;            if(i == s.size())                break;            if(s[i] == ‘+‘ || s[i] == ‘-‘ || s[i] == ‘(‘)            {                op.push(s[i]);                i ++;               }            else if(s[i] == ‘)‘)            {                while(op.top() != ‘(‘)                {// calculation within parentheses                     int n2 = num.top();                    num.pop();                    int n1 = num.top();                    num.pop();                    if(op.top() == ‘+‘)                        num.push(n1 + n2);                    else                        num.push(n1 - n2);                    op.pop();                }                op.pop();                while(!op.empty() && op.top() != ‘(‘)                {                    int n2 = num.top();                    num.pop();                    int n1 = num.top();                    num.pop();                    if(op.top() == ‘+‘)                        num.push(n1 + n2);                    else                        num.push(n1 - n2);                    op.pop();                }                i ++;            }            else            {                int n = 0;                while(i < s.size() && s[i] >= ‘0‘ && s[i] <= ‘9‘)                {                    n = n*10 + (s[i]-‘0‘);                    i ++;                }                num.push(n);                while(!op.empty() && op.top() != ‘(‘)                {                    int n2 = num.top();                    num.pop();                    int n1 = num.top();                    num.pop();                    if(op.top() == ‘+‘)                        num.push(n1 + n2);                    else                        num.push(n1 - n2);                    op.pop();                }            }        }        return num.top();    }};

【LeetCode】224. Basic Calculator

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.