1. 题目解析
这道题一看就知道是典型的栈的问题。
基本思想:
- 创建一个栈,遍历数组,遇到数字就入栈。
- 遇到“C”就将栈顶元素删除。
- 遇到“D”就访问栈顶元素,用栈顶的数字*2,把这个数字入栈。
- 遇到“+”就访问栈顶两个元素,相加之后把这个数字入栈
2. 代码实现
2.1. Python代码
class Solution(object):
def calPoints(self, ops):
"""
:type ops: List[str]
:rtype: int
"""
stack = []
for i in ops:
if i == '+':
stack.append(stack[-1] + stack[-2])
elif i == 'D':
stack.append(stack[-1] * 2)
elif i == 'C':
stack.pop()
else:
stack.append(int(i))
return sum(stack)
2.2. Java代码
class Solution {
public int calPoints(String[] ops) {
Stack stack = new Stack();
int target = 0;
for(int i = 0;i < ops.length;i++){
if(ops[i].equals("+")){
int num1 = (int) stack.peek();
int value = (int) stack.pop();
int num2 = (int) stack.peek();
stack.add(value);
stack.add(num1 + num2);
}else if(ops[i].equals("D")){
stack.add((int)stack.peek() * 2);
}else if(ops[i].equals("C")){
stack.pop();
}else{
stack.add(Integer.valueOf(ops[i]));
}
}
while(!stack.empty()){
target = target + (int)stack.pop();
}
return target;
}
}