写在前面: 挺简单的一道栈应用,用sum记录总分,用栈记录过程就行了
欢迎关注我的力扣github仓库,有JavaScript和C++两个版本,每日更新
C++代码:
class Solution {
public:
int calPoints(vector<string>& ops) {
int sum=0;
stack<int> stack;
for(int i=0;i<ops.size();i++){
if(ops[i]=="C"){
sum-=stack.top();
stack.pop();
}
else if(ops[i]=="D"){
sum+=stack.top()*2;
stack.push(stack.top()*2);
}
else if(ops[i]=="+"){
int a,b; //保存弹栈一次和两次的值
a=stack.top(),stack.pop();
b=stack.top(),stack.pop();
sum+=a+b;
stack.push(b),stack.push(a),stack.push(a+b);
}
else{
int a;
stringstream ss; //字符串转数字
ss<<ops[i];
ss>>a;
sum+=a;
stack.push(a);
}
}
return sum;
}
};
JS代码:
/**
* @param {string[]} ops
* @return {number}
*/
var calPoints = function(ops) {
var stack=[],sum=0;
for(let i=0;i<ops.length;i++){
if(ops[i]=='C'){
sum-=parseInt(stack[stack.length-1]);
stack.pop();
}
else if(ops[i]=='D'){
sum+=parseInt(stack[stack.length-1])*2;
stack.push(parseInt(stack[stack.length-1])*2);
}
else if(ops[i]=='+'){
let a=parseInt(stack[stack.length-1]);
stack.pop();
let b=parseInt(stack[stack.length-1]);
stack.pop();
sum+=a+b;
stack.push(b),stack.push(a),stack.push(a+b);
}
else{
sum+=parseInt(ops[i]);
stack.push(ops[i]);
}
}
return sum;
};