「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」
LeetCode227.基本计算器||
题目要求
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
示例 1:
输入:s = "3+2*2"
输出:7
示例 2:
输入:s = " 3/2 "
输出:1
思路
我们可以先取出数字部分保存在一个变量里面,再判断符号部分
-
如果是
+就把上一次找到的数字放进一个数组里面 -
如果是
-就把上一次找到的数字前面添加一个-然后放进数组里面 -
如果是
*就把数组最后面的一个数字*上一次找到的数字得到一个结果然后放进数组里面 -
如果是
/就把数组最后面的一个数字/上一次找到的数字最后返回一个整数
再保证数组的长度大于0的情况下对数组里面的值做求和操作
var calculate = function(s) {
s = s.trim();
let stack = [];
let len = s.length;
let sign = '+';
let num = 0;
for (let i=0; i<len; i++) {
// 找出所有的数字
if (!isNaN(Number(s[i])) && s[i] !== ' ') {
num = num * 10 + s[i].charCodeAt() - '0'.charCodeAt();
}
// 找出里面的所有符号
if (isNaN(Number(s[i])) || i === len-1) {
switch (sign) {
case '+':
stack.push(num);
break;
case '-':
stack.push(-num); // -num = + (-num)
break;
case '*':
stack.push(stack.pop() * num)
break;
default:
stack.push(parseInt(stack.pop() / num)); //注意取整数
break;
}
sign = s[i]; // 替换sign 的值
num = 0;
}
}
let ans = 0;
while (stack.length) {
ans += stack.pop();
}
return ans;
};