682. 棒球比赛

>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 相关方法

  1. empty() 测试堆栈是否为空。
  2. peek() 查看堆栈顶部的对象,但 不从堆栈中移除 它。
  3. pop() 移除 堆栈顶部的对象,并作为此函数的值 返回该对象
  4. push(E item) 把项压入堆栈顶部。
  5. 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;
    }
}

运行结果截图如下:
运行结果截图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值