[227] 基本计算器 II(30)

126 阅读1分钟

有事情再加上过年 耽搁了一个多月重新写代码; 还是看不懂,自己想更不用想了,看了一遍船长和助教的代码,都是一脸懵,又去了看了一些题解,还是采用大多数人都写的,也就是助教写的 单栈写法。看懂了个大概开始写代码,除了几个笔误,逻辑还是记者了,正确代码如下,做了简单的注释

/**
 * @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能够一遍看明白,之前这个方法的用法都没有掌握啊。 继续努力吧。