leetcode 224 基本計算器

2021-10-01 14:17:03 字數 1393 閱讀 9161

實現乙個基本的計算器來計算乙個簡單的字串表示式的值。

字串表示式可以包含左括號 ( ,右括號 ),加號 + ,減號 -,非負整數和空格 。

示例 1:

輸入: 「1 + 1」

輸出: 2

示例 2:

輸入: " 2-1 + 2 "

輸出: 3

示例 3:

輸入: 「(1+(4+5+2)-3)+(6+8)」

輸出: 23

採用雙棧法,設立乙個資料棧和乙個操作符棧,在遍歷字串的過程中,如果乙個字元為數字字元,先將字串中的資料找到,此處需要回退操作,然後將資料push入棧,判斷是否滿足運算的條件。如果為左括號或者加減符號則直接入棧,遇到右括號先pop掉符號棧的棧頂元素,因為有乙個右括號肯定會有乙個左括號與之對應,然後再進行計算。

建立乙個函式compute(),該函式的作用是處理資料棧中的資料,即如果資料棧中的資料小於2,就return,如果資料棧中的資料大於2,並且符號棧的棧頂元素為+號和-號,就依次彈出兩個資料num1和num2,進行加減運算,並且將運算結果再次push進入資料棧,如此進行迴圈,如果符號棧的棧頂為』('符號則直接進行返回,什麼也不做。

class

solution

//處理數字,生成整數,並壓棧,判斷進行計算

if(s[i]

>=

'0'&& s[i]

<=

'9')

i--; number_stack.

push

(number)

;compute

(number_stack,operation_stack);}

else

if(s[i]

==')'

)//如果為(+-運算符號則直接入棧

else

}return number_stack.

top();

}private

:void

compute

(stack<

int>

&number_stack,stack<

char

>

&operation_stack)

while

(operation_stack.

size()

>0&&

(operation_stack.

top()==

'+'|| operation_stack.

top()==

'-')

)else

if(operation_stack.

top()==

'-')

operation_stack.

pop();

}}};

leetcode 224 基本計算器

題目 基本計算器 實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例1 輸入 1 1 輸出 2 示例2 輸入 2 1 2 輸出 3 示例3 輸入 1 4 5 2 3 6 8 輸出 23 說明 c include include cl...

Leetcode 224基本計算器

邏輯先寫第三步再寫第二步,思考時要按照表示式順序先看數字再看右括號正常考慮,時間複雜度o n class solution intcalculate string s else 遇到數字 nums.push n 處理多位數等價寫法 while j s.size isdigit s j j j i c...

leetcode 224 基本計算器

實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例 1 輸入 1 1 輸出 2 示例 2 輸入 2 1 2 輸出 3 示例 3 輸入 1 4 5 2 3 6 8 輸出 23 這道題中帶了括號,可以用字尾表示式實現。詳情參見 鏈結1鏈...