棒球比赛
Posted wswpyt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了棒球比赛相关的知识,希望对你有一定的参考价值。
你现在是棒球比赛记录员。
给定一个字符串列表,每个字符串可以是以下四种类型之一:
1.整数
(一轮的得分):直接表示您在本轮中获得的积分数。
2. "+"
(一轮的得分):表示本轮获得的得分是前两轮有效
回合得分的总和。
3. "D"
(一轮的得分):表示本轮获得的得分是前一轮有效
回合得分的两倍。
4. "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分(第三轮的数据已被删除)。总和是:-1。
第5轮:你可以得到9分。总数是:8。
第6轮:你可以得到-4 + 9 = 5分。总数是13。
第7轮:你可以得到9 + 5 = 14分。总数是27。
注意:
- 输入列表的大小将介于1和1000之间。
- 列表中的每个整数都将介于-30000和30000之间。
根据此题掌握数据结构中栈的使用
题目分析:棒球比赛的时候,每一轮都会得分,此时有3种操作,相应的操作会改变本轮的得分,处理完后,将每轮的得分加起来就是要得出的结果。
那么此题也很明显可以用栈的操作来实现:扫描字符数组,当扫描到的字符是数字的时候,入栈;但扫描到的字符是‘+‘,‘C‘,‘D‘的时候按照要求对得分进行操作,最后将栈中的数加起来就是得分。
有很多运用栈的技巧小细节:
1.要实现‘+‘的功能,这需要获取栈中的最顶部两个元素,这就需要连着运用两次pop()操作,取出数,存储,之后再将这两个数和他们的和入栈;
一定要注意,在将原先的两个数入栈的时候,一定要先入栈第二个元素,这样顺序才不会错,栈是先进后出的表。
1 if (s.equals("+")) 2 { 3 int nums1 = stack.pop(); 4 int nums2 = stack.pop(); 5 stack.push(nums2); 6 stack.push(nums1); 7 stack.push(nums1 + nums2); 8 }
2.实现‘C‘的功能,则直接运用pop()操作:
1 else if (s.equals("C")) 2 { 3 stack.pop(); 4 }
3.实现‘D‘的功能,则也需要现将栈顶元素出栈,存储,然后将取出的数和此数的2倍入栈,顺序也一定是先入栈取出的数,在入栈次数的2倍。
1 else if (s.equals("D")) 2 { 3 int num = stack.pop(); 4 stack.push(num); 5 stack.push(num * 2); 6 }
4.最后总得分的时候,如何获取栈中的元素?这里只需要利用while()循环,只要stack不空,则运用pop()取出栈顶元素相加即可。
1 int sum = 0; 2 while (!stack.isEmpty()) 3 { 4 sum += stack.pop(); 5 } 6 return sum;
实现代码:
1 public int calPoints(String[] ops)
2 {
3 Stack<Integer> stack = new Stack<>();
4
5 for (String s : ops)
6 {
7 if (s.equals("+"))
8 {
9 int nums1 = stack.pop();
10 int nums2 = stack.pop();
11 stack.push(nums2);
12 stack.push(nums1);
13 stack.push(nums1 + nums2);
14 }
15
16 else if (s.equals("C"))
17 {
18 stack.pop();
19 }
20
21 else if (s.equals("D"))
22 {
23 int num = stack.pop();
24 stack.push(num);
25 stack.push(num * 2);
26 }
27
28 else
29 stack.push(Integer.parseInt(s));
30 }
31
32 int sum = 0;
33 while (!stack.isEmpty())
34 {
35 sum += stack.pop();
36 }
37 return sum;
38 }
主函数:
1 public static void main(String[] args) 2 { 3 T7 t = new T7(); 4 int end = t.calPoints(new String[]{"5","-2","4","C","D","9","+","+"}); 5 System.out.println(end); 6 }
运行结果:
1 27
以上是关于棒球比赛的主要内容,如果未能解决你的问题,请参考以下文章