整数x-表示本回合新获得分数x;“+” – 表示本回合新获得的得分是前两次得分的总和。“D” – 表示本回合新获得的得分是前一次得分的两倍。“C” – 表示本回合没有分数,并且前一次得分无效,将其从记录中移除。请你返回记录中所有得分的总和。需要考虑异常的存在,如有异常情况,请返回-1。java输出
时间: 2024-03-08 14:47:43 浏览: 20
以下是实现该功能的Java代码:
```java
import java.util.Stack;
public class Solution {
public int calPoints(String[] ops) {
Stack<Integer> stack = new Stack<>();
int sum = 0;
for (String op : ops) {
if (op.equals("+")) {
int top = stack.pop();
int newTop = top + stack.peek();
stack.push(top);
stack.push(newTop);
sum += newTop;
} else if (op.equals("D")) {
int newTop = stack.peek() * 2;
stack.push(newTop);
sum += newTop;
} else if (op.equals("C")) {
sum -= stack.pop();
} else {
try {
int newTop = Integer.parseInt(op);
stack.push(newTop);
sum += newTop;
} catch (NumberFormatException e) {
return -1;
}
}
}
return sum;
}
}
```
该代码使用栈来实现记录分数的功能。遍历输入的操作数组,对于不同的操作,分别进行不同的处理:
- 如果是“+”,则取出栈顶元素,计算出新的栈顶元素并入栈,同时累加总分数。
- 如果是“D”,则取出栈顶元素,计算出新的栈顶元素并入栈,同时累加总分数。
- 如果是“C”,则弹出栈顶元素,同时从总分数中减去该元素的值。
- 如果是数字,则将其转换为整数并入栈,同时累加总分数。
- 如果无法识别操作,则说明输入存在异常,返回-1。
最后返回总分数即可。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)