Problem:
You’re now a baseball game point recorder. Given a list of strings, each string can be one of the 4 following types:
You need to return the sum of the points you could get in all the rounds.
Example 1:
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.
Example 2:
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.
Note:
The size of the input list will be between 1 and 1000.
Every integer represented in the list will be between -30000 and 30000.
思路: straightforward,题意即思路。
代码如下:
public int calPoints(String[] ops) {
List<Integer> ans = new ArrayList<>();
for (int i = 0; i < ops.length; ++i) {
String val = ops[i];
if (val.equals("C")) {
ans.remove(ans.size() - 1);
}
else if (val.equals("D")) {
int last = ans.get(ans.size() - 1);
ans.add(last * 2);
}
else if (val.equals("+")) {
int last = ans.get(ans.size() - 1);
int prev = ans.get(ans.size() - 2);
ans.add(last + prev);
}
else {
int num = Integer.parseInt(val);
ans.add(num);
}
}
int sum = 0;
for (int i = 0; i < ans.size(); ++i) {
sum += ans.get(i);
}
return sum;
}
数组的长度其实是已知的,所以直接用指针动态增减,代码如下:
public int calPoints(String[] ops) {
int n = ops.length;
int[] list = new int[n + 1];
int tot = 0;
for (int i = 0; i < n; ++i) {
String val = ops[i];
if (val.equals("C")) {
tot--;
}
else if (val.equals("D")) {
int lst = list[tot - 1];
list[tot++] = lst * 2;
}
else if (val.equals("+")) {
int lst = list[tot - 1];
int prv = list[tot - 2];
list[tot++] = lst + prv;
}
else {
int num = Integer.parseInt(val);
list[tot++] = num;
}
}
int sum = 0;
for (int i = 0; i < tot; ++i) {
sum += list[i];
}
return sum;
}