【题目】给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。
【示例】
输入:s = "3+22"
输出:7
输入:s = " 3/2 "
输出:1
输入:s = " 3+5 / 2 "
输出:5
【提示】
1 <= s.length <= 3 * 105
s 由整数和算符 ('+', '-', '', '/') 组成,中间由一些空格隔开
s 表示一个 有效表达式
表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内
题目数据保证答案是一个 32-bit 整数
【答案】
var calculate = function(s) {
s = s.trim()
const stack = new Array()
let num = 0
let preSign = '+'
const n= s.length
for (let i = 0; i < n; i++) {
if ( !(isNaN(Number(s[i]))) && s[i] != ' ' ) {
num = num*10 + s[i].charCodeAt() - '0'.charCodeAt()
}
if ( isNaN(Number(s[i])) || i === n-1 ) {
switch (preSign) {
case '+':
stack.push(num)
break;
case '-':
stack.push(-num)
break;
case '*':
stack.push(stack.pop()*num)
break;
default:
stack.push(stack.pop()/num|0)
break;
}
preSign = s[i]
num = 0
}
}
let ans = 0
while ( stack.length ) {
ans += stack.pop()
}
return ans
};
let s = '3+2*4'
calculate(s) // 11
网友评论