實現乙個基本的計算器來計算乙個簡單的字串表示式s
的值。
示例1:
輸入:s = "1 + 1"
輸出:2
示例2:
輸入:s = " 2-1 + 2 "
輸出:3
示例3:
輸入:s = "(1+(4+5+2)-3)+(6+8)"
輸出:23
這道題僅包含+
和-
兩種運算子,不需要考慮運算子優先順序的問題。
加入給定乙個僅包含+
和-
,不含括號的式子,那麼求解將變得十分簡單,而加上括號之後,我們需要考慮的是,乙個數字在整個式子裡應該是被加上還是被減去?(即這個數字的真正符號是?)
對任意乙個數字,我們假設該數字外面有n
層括號包裹,那麼這個數字的正負性應當這樣考慮:記錄每層括號前的乙個運算子,以及該數字前的運算子,通過負負得正,判斷該數字的真正符號。
繼續思考,發現+
並不改變乙個數字的正負性,我們需要記錄該數字的每層括號前的符號中,有幾個-
。
用乙個棧記錄每一層括號前的符號,**如下:
class solution
else if(s[i] == '-')
else if(s[i] == '(')
else if(s[i] == ')')
else
ans += sign * num;}}
return ans;
}};
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 基本計算器
實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例 1 輸入 1 1 輸出 2 示例 2 輸入 2 1 2 輸出 3 示例 3 輸入 1 4 5 2 3 6 8 輸出 23 採用雙棧法,設立乙個資料棧和乙個操作符棧,在遍歷字串的過程...
Leetcode 224基本計算器
邏輯先寫第三步再寫第二步,思考時要按照表示式順序先看數字再看右括號正常考慮,時間複雜度o n class solution intcalculate string s else 遇到數字 nums.push n 處理多位數等價寫法 while j s.size isdigit s j j j i c...