有事情再加上过年 耽搁了一个多月重新写代码; 还是看不懂,自己想更不用想了,看了一遍船长和助教的代码,都是一脸懵,又去了看了一些题解,还是采用大多数人都写的,也就是助教写的 单栈写法。看懂了个大概开始写代码,除了几个笔误,逻辑还是记者了,正确代码如下,做了简单的注释
/**
* @param {string} s
* @return {number}
*/
var calculate = function (s) {
s = s.trim();
let preSign = '+';
let num = 0;
const stack = [];
for (let i = 0; i < s.length; i++) {
// 处理数字 把它变成number类型 *10 说是可能是非个位数 不太了解 先记录
if (!isNaN(s[i]) && s[i] !== ' ') {
num = num * 10 + Number(s[i])
}
// 处理符号 或者 到字符串最后一位了
if (isNaN(s[i]) || i === s.length - 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;
}
}
return stack.reduce((a, b) => a + b);
};
只不过这也是短暂的记忆,这样前面写后面忘,进步很是缓慢啊,反正现在再让我直接写之前的题目,大概率还是写不出来,只能硬着头皮,每天看视频,比这视频写了。 不过还有一点儿进步,就是看他们写代码中间不懂得方法什么的 我都是去弄懂了,比如说这个reduce能够一遍看明白,之前这个方法的用法都没有掌握啊。 继续努力吧。