LeetCode每日一練 基本計算器 JS

2021-10-21 21:07:14 字數 1476 閱讀 1374

給你乙個字串表示式 s ,請你實現乙個基本計算器來計算並返回它的值。 整數除法僅保留整數部分。

示例1:s=" 3 +2*2" ->7

示例2:s=" 3/2 "->1

示例3:s=:" 3+5 / 2"->5

規則:1、1 <= s.length <= 3 * 105

2、s 由整數和算符 (』+』, 『-』, 『*』, 『/』) 組成,中間由一些空格隔開

3、s 表示乙個 有效表示式

4、表示式中的所有整數都是非負整數,且在範圍 [0, 231 - 1] 內

5、題目資料保證答案是乙個 32-bit 整數

測試用例可用"3+2*2"; "5/2"; " 3 + 8* 8 "
基本思路:棧

由於在算術中,/的優先順序比-+高,所以我們可以先進行所有的/運算,然後將結果放在表示式原位置,最後表示式的值就為所有數加減後的值;

方法:我們可以用乙個棧,儲存進行*/運算後的值,對於-+運算子之後的數字,直接壓入棧,對於*/之後的數字,與當前棧頂元素進行計算後,替換當前棧頂元素;

**實現:

首先函式接收到字串s之後,先呼叫s.trim();方法,刪除字串前後的空字元;

var pre="+"將字串第乙個數字前視為加號,遍歷字串,遇到字元符合(數字&&不是空字元)的話,識別當前的數字,遇到字元符合(不是數字||遍歷到字串最後乙個字元)視為遍歷到了數字末尾或者字串末尾,根據pre來決定計算方式,運算之後將pre更新為當前的字元

pre:

1."+", num入棧

2."-", (-num)入棧

3."* /" 計算數字與棧頂元素,並且替換棧頂元素為計算結果

遍歷完字串s後,將棧中的元素進行累加,得出最終值。

varcalculate

=function

(s)if

(isnan

(number

(s[i]))

|| i===s.length-1)

//執行這個if說明乙個數字已經遍歷結束

case

"-":

case

"*":

case

"/":

} pre=s[i]

; num=0;

}}var sum=0;

while

(stack.length)

return sum;};

console.

log(

calculate

(" 3 +2*2"))

;//測試用例

<

/script>

Leetcode 每日一練

最小棧 設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 輸入 minstack push push push getmin pop top ge...

Leetcode 每日一練

leetcode 每日一練 擁有最多糖果的孩子 給你乙個陣列 candies 和乙個整數 extracandies 其中 candies i 代表第 i 個孩子擁有的糖果數目。對每乙個孩子,檢查是否存在一種方案,將額外的 extracandies 個糖果分配給孩子們之後,此孩子有 最多 的糖果。注意...

Leetcode 每日一練

猜數字 小a 和 小b 在玩猜數字。小b 每次從 1,2,3 中隨機選擇乙個,小a 每次也從 1,2,3 中選擇乙個猜。他們一共進行三次這個遊戲,請返回 小a 猜對了幾次?輸入的guess陣列為 小a 每次的猜測,answer陣列為 小b 每次的選擇。guess和answer的長度都等於3。示例 1...