一、题目描述
示例:
二、解题思路
栈ADT有四种典型的应用场景,分别为:
1.平衡符号。 可用于编译器检查程序语法错误。
2.后缀表达式。 或称后缀记法或逆波兰记法。
3.中缀到后缀的转换。
4.程序调用。
这题刚好与后缀表达式的应用相似。
解题思路为,遇到常数,直接压入栈,遇到其他三种操作符,则进行对应的操作。最后把栈内所有的元素加在一起得到结果。
三、编程实现
class Solution {
public int calPoints(String[] ops) {
if (ops.length == 0)
return 0;
Stack<Integer> stack = new Stack<>();
for(String str : ops){
if (str.equals("+")){
int k1 = stack.pop();
int k2 = stack.peek();
stack.push(k1);
stack.push(k1 + k2);
}
else if (str.equals("D")){
int temp2 = stack.peek()*2;
stack.push(temp2);
}
else if (str.equals("C")){
stack.pop();
}
else
stack.push(Integer.parseInt(str));
}
int result = 0;
for(int i : stack){
result += i;
}
return result;
}
}