983. 棒球游戏

/*
* 描述 中文 English 现在你是棒球比赛分记录员。
*
* 给定一个字符串数组,每一个字符串可以是以下4种中的其中一个:
*
* 整数 (一个回合的分数): 直接表示这回合你得到的分数。 “+” (一个回合的分数): 表示这回合你获得的分数为前两个 有效 分数之和。
* “D”(一个回合的分数): 表示这回合你得到的分数为你上一次获得的有效分数的两倍。 “C”
* (一种操作,而非一个回合的分数):表示你上回合的有效分数是无效的,需要移除。 每一轮的操作都是永久性的,可能会影响之前和之后的一轮。
* 你需要返回在所有回合中获得总分数。
*
* 样例1:
*
* 输入: [“5”,“2”,“C”,“D”,"+"] 输出: 30 解释: 回合 1: 你可以得到 5 分,和为:5。 回合 2: 你可以得到 2
* 分,和为:7。 操作 1: 回合 2 的数据无效,所以和为 5。 回合 3: 你可以得到 10 分(回合 2 的数据已经被移除了),和为:15。 回合
* 4: 你可以得到 5 + 10 = 15 分,和为:30。
*
*
* 样例2:
*
* 输入: [“5”,"-2",“4”,“C”,“D”,“9”,"+","+"] 输出: 27 解释: 回合 1: 你可以得到 5 分,和为:5。 回合 2:
* 你可以得到 -2 分,和为:3。 回合 3: 你可以得到 4 分,和为:7。 操作 1: 回合 3的数据无效,所以和为 3。 回合 4: 你可以得到 -4
* 分(回合 3的数据已经被移除了),和为:-1。 回合 5: 你可以得到 9 分,和为:8。 回合 6: 你可以得到 -4 + 9 = 5 分,和为:13。
* 回合 7: 你可以得到 9 + 5 = 14 分,和为27。
*
* pop() 出栈 push() 进栈 peek() 取栈顶数据
*/

public static int calPoints(String[] ops) {
	// Write your code here
	// ["5","-2","4","C","D","9","+","+"]
	 int sum = 0;
	    Stack<Integer> stack = new Stack<>();
	    for (String op : ops) {
	        if ("C".equals(op)) {
	            int score = stack.pop();
	            sum -= score;
	        } else if ("D".equals(op)) {
	            int score = stack.peek() * 2;
	            stack.push(score);
	            sum += score;
	        } else if ("+".equals(op)) {
	            int score = stack.pop();
	            int prevScore = stack.peek();
	            int totalScore = score + prevScore;
	            stack.push(score);
	            stack.push(totalScore);
	            sum += totalScore;
	        } else {
	            int score = Integer.parseInt(op);
	            stack.push(score);
	            sum += score;
	        }
	    }
	    return sum;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值