>682. 棒球比赛<
>calPoints<
一、解题思路
1、解法一( Java )
解法思路:List 模拟栈
- 如果操作是
+
,那么访问数组的后两个得分,将两个得分之和加到总得分,并且将两个得分之和入栈。 - 如果操作是
D
,那么访问数组的最后一个得分,将得分乘以 2 加到总得分,并且将得分乘以2
入栈。 - 如果操作是
C
,那么访问数组的最后一个得分,将总得分减去该得分,并且将该得分出栈。 - 如果操作是整数,那么将该整数加到总得分,并且将该整数入栈。
伪代码如下:
/**
* @author Listen 1024
* @description 682.棒球比赛
* @date 2022-03-26 9:15
*/
//模拟堆栈
class Solution8 {
public int calPoints(String[] ops) {
int ans = 0;
List<Integer> list = new ArrayList<Integer>();
if (ops.length == 0) {
return 0;
}
for (String op : ops) {
int len = list.size();
switch (op) {
case "+":
ans += list.get(len - 1) + list.get(len - 2);
list.add(list.get(len - 1) + list.get(len - 2));
break;
case "C":
ans -= list.get(len - 1);
list.remove(len - 1);
break;
case "D":
ans += (list.get(len - 1)) * 2;
list.add((list.get(len - 1)) * 2);
break;
default:
ans += Integer.parseInt(op);
list.add(Integer.parseInt(op));
break;
}
}
return ans;
}
}
1、解法二( Java )
解法思路:Stack 栈
- 如果操作是
+
,那么访问数组的后两个得分,将两个得分之和加到总得分,并且将两个得分之和入栈。 - 如果操作是
D
,那么访问数组的最后一个得分,将得分乘以 2 加到总得分,并且将得分乘以2
入栈。 - 如果操作是
C
,那么访问数组的最后一个得分,将总得分减去该得分,并且将该得分出栈。 - 如果操作是整数,那么将该整数加到总得分,并且将该整数入栈。
(1)Stack
相关方法
empty()
测试堆栈是否为空。peek()
查看堆栈顶部的对象,但 不从堆栈中移除 它。pop()
移除 堆栈顶部的对象,并作为此函数的值 返回该对象。push(E item)
把项压入堆栈顶部。search(Object o)
返回对象在堆栈中的位置,以 1 为基数。
伪代码如下:
/**
* @author Listen 1024
* @description 682.棒球比赛
* @date 2022-03-26 9:15
*/
//Stack 栈
class Solution8 {
public int calPoints(String[] ops) {
int ans = 0;
Stack<Integer> stack = new Stack<>();
if (ops.length == 0) {
return 0;
}
for (String op : ops) {
switch (op) {
case "+":
int top = stack.pop();
int secTop = stack.peek();
ans += top + secTop;
stack.push(top);
stack.push(top + secTop);
break;
case "C":
ans -= stack.pop();
break;
case "D":
ans += stack.peek() * 2;
stack.push(stack.peek() * 2);
break;
default:
int currVal = Integer.parseInt(op);
stack.push(currVal);
ans += currVal;
//break;
//default语句中的break可以省略
}
}
return ans;
}
}
运行结果截图如下: