题目
-
概述:给你一个字符串列表,字符串列表的每一项表示积分或者操作,你需要通过累加每个积分以及执行每一项操作计算最后得分
-
输入:[1, 1000]的字符串列表
-
输入子项:
- 整数:直接表示本回合积分,范围为[-30000, 30000]
- “+”:本轮积分为前两回合积分的和
- “D”:本轮积分为前一回合积分的两倍
- “C”:移除前一回合获得的积分
"C"以及被"C"操作移除的回合都不算作回合
思路
-
由于该问题需要频繁操作前一回合或前两回合的数据,所以选用栈这种数据结构
-
依次执行每个字符串所代表的操作:
- case 整数:直接入栈
- case "+":出栈,计算出栈的数和栈顶的数的和记为s,入栈,将s入栈
- case "D":将是当前栈顶的数的2倍的数入栈
- case "C":出栈
- 出栈直到栈为空并累加求和
代码
class Solution {
public int calPoints(String[] ops) {
LinkedList<Integer> stack = new LinkedList<>();
int num, temp;
for (String op : ops) {
switch (op) {
case "+":
temp = stack.pop();
num = temp + stack.peek();
stack.push(temp);
stack.push(num);
break;
case "D":
stack.push(stack.peek() * 2);
break;
case "C":
stack.pop();
break;
default:
stack.push(Integer.valueOf(op));
break;
}
}
int result = 0;
while (!stack.isEmpty()) {
result += stack.pop();
}
return result;
}
}
网友评论