因为涉及到数据的保存,同时也需要快速获取上两次的数据,可以用数组对栈进行模拟。
- C: 直接将栈顶推出
- D: 获取栈顶的值,
double之后推入栈中 - +: 获取栈顶和栈次顶的值,相加之后推入栈中
- 其他情况: 转成整数放入栈中
function calPoints(ops: string[]): number {
const stack: number[] = []
for (let i = 0; i < ops.length; i++) {
switch (ops[i]) {
case 'C':
stack.pop()
break
case 'D':
stack.push(stack[stack.length - 1] * 2)
break
case '+':
stack.push(stack[stack.length - 1] + stack[stack.length - 2])
break
default:
stack.push(+ops[i])
}
}
return stack.reduce((a, b) => a + b, 0)
}