Problem
You"re now a baseball game point recorder.
Given a list of strings, each string can be one of the 4 following types:
Integer (one round"s score): Directly represents the number of points you get in this round.
"+" (one round"s score): Represents that the points you get in this round are the sum of the last two valid round"s points.
"D" (one round"s score): Represents that the points you get in this round are the doubled data of the last valid round"s points.
"C" (an operation, which isn"t a round"s score): Represents the last valid round"s points you get were invalid and should be removed.
Each round"s operation is permanent and could have an impact on the round before and the round after.
You need to return the sum of the points you could get in all the rounds.
Example1:
Input: ["5","2","C","D","+"]
Output: 30
Explanation:
Round 1: You could get 5 points. The sum is: 5.
Round 2: You could get 2 points. The sum is: 7.
Operation 1: The round 2"s data was invalid. The sum is: 5.
Round 3: You could get 10 points (the round 2"s data has been removed). The sum is: 15.
Round 4: You could get 5 + 10 = 15 points. The sum is: 30.
Example2:
Input: ["5","-2","4","C","D","9","+","+"]
Output: 27
Explanation:
Round 1: You could get 5 points. The sum is: 5.
Round 2: You could get -2 points. The sum is: 3.
Round 3: You could get 4 points. The sum is: 7.
Operation 1: The round 3"s data is invalid. The sum is: 3.
Round 4: You could get -4 points (the round 3"s data has been removed). The sum is: -1.
Round 5: You could get 9 points. The sum is: 8.
Round 6: You could get -4 + 9 = 5 points. The sum is 13.
Round 7: You could get 9 + 5 = 14 points. The sum is 27.
public class Solution { /** * @param ops: the list of operations * @return: the sum of the points you could get in all the rounds */ public int calPoints(String[] ops) { // Write your code here ListscoreRecord = new ArrayList<>(); int score = 0; for (String s: ops) { int size = scoreRecord.size(); if (isNumeric(s)) { score += Integer.valueOf(s); scoreRecord.add(Integer.valueOf(s)); } else if (s.equals("C")) { score -= scoreRecord.get(size-1); scoreRecord.remove(size-1); } else if (s.equals("D")) { int roundScore = 2*scoreRecord.get(size-1); score += roundScore; scoreRecord.add(roundScore); } else if (s.equals("+")) { int prevOne = size >= 1 ? scoreRecord.get(size-1) : 0; int prevTwo = size >= 2 ? scoreRecord.get(size-2) : 0; int roundScore = prevOne + prevTwo; score += roundScore; scoreRecord.add(roundScore); } else { continue; } } return score; } public boolean isNumeric(String s) { return s != null && s.matches("[-+]?d*.?d+"); } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/71379.html
摘要:题目链接题目分析给定一个字符串数组,每一个字符串有以下形式数字。直接计算得分。。代表上一轮分数无效。思路这题没什么好说的了。用区分各种情况,进行相应处理即可。最终代码若觉得本文章对你有用,欢迎用爱发电资助。 682. Baseball Game 题目链接 682. Baseball Game 题目分析 给定一个字符串数组,每一个字符串有以下形式: 数字。直接计算得分。 +。代表本轮...
摘要:建立动规数组,表示从起点处到达该点的可能性。循环结束后,数组对所有点作为终点的可能性都进行了赋值。和的不同在于找到最少的步数。此时的一定是满足条件的最小的,所以一定是最优解。 Jump Game Problem Given an array of non-negative integers, you are initially positioned at the first index...
摘要:添加元素到数组合并两个数组错误方法应该用方法,将被的数组当成参数数组。会改变数组,返回最新属性,占用内存较少。 一、Array.prototype.concat() concat方法将创建一个新的数组,然后将调用它的对象(this指向的对象)中的元素以及所有参数中的数组类型的参数中的元素以及非数组类型的参数本身按照顺序放入这个新数组,并返回该数组。concat方法并不修改调用它的对象...
This morning , I took my first leetcode online.However, that is far beyond what I expected . I didn’t make it to finish in 1 hour and 30 minutes. But via solving the 1st problem , which is marked ea...
摘要:如果被引用的对象发生改变,则改变将反应到新的和原来的数组中对于字符串和数字来说不是和对象,会拷贝字符串和数字到新的数组里。在一个数组里修改这些字符串或数字,不会影响另一个数组。 (1) arr.length => 返回一个数组中的元素个数(数组属性) var numbers = [1,2,3,4,5]; numbers.length; // 5 (2) arr.indexOf(sear...
阅读 1273·2023-04-26 01:03
阅读 1852·2021-11-23 09:51
阅读 3280·2021-11-22 15:24
阅读 2647·2021-09-22 15:18
阅读 990·2019-08-30 15:55
阅读 3392·2019-08-30 15:54
阅读 2165·2019-08-30 15:53
阅读 2368·2019-08-30 15:44