LeetCode 682 棒球比赛

简介: 用栈实现数字的运算用switch-case语句对符号进行不同的操作处理用Stack下的get()方法实现取出栈内第任意个数字

题目


image.png

思路

用栈实现数字的运算

用switch-case语句对符号进行不同的操作处理

用Stack下的get()方法实现取出栈内第任意个数字

注意:


此题不能用ArrayDeque实现栈,如果用ArrayDeque话,对于符号 ‘+’ 的操作比较复杂,因为出栈以后还需要将运算式子项重新返回栈才能再将运算结果压栈。


API

一般栈的实现通过接口Deque实现,但是这道题中需要使用到Stack下的get()方法,即通过下标获取栈内元素,所以用Stack类实现。

用正则表达式取出正数,对于负数,我们可以不用正则表达式,直接用String下的charAt()方法获取第一个字符位置的符号,如果是 ‘-’ 那么就判定为负数进行压栈处理。

class Solution {
    public int calPoints(String[] operations) {
            int result=0;
            Stack<Integer> stack = new Stack<>();
            for(String s : operations){
                //使用正则表达式取出数字
                if(s.charAt(0)=='-'){
                    int num = Integer.parseInt(s);
                    stack.push(num);
                    result += num;
                }else if(s.matches("\\d+")){
                    int num = Integer.parseInt(s);
                    stack.push(num);
                    result += num;
                }else{
                    switch(s){
                        case "C":
                            result -= stack.pop();
                            break;
                        case "D":
                          int num = stack.peek()*2;
                            stack.push(num);
                            result += num;
                            break;
                        case "+":
                            int rs = stack.get(stack.size()-1)+stack.get(stack.size()-2);
                            stack.push(rs);
                            result+=rs;
                            break;
                    }
                }
            }
                return result;
        }
}



相关文章
|
7月前
|
Go
golang力扣leetcode 675.为高尔夫比赛砍树
golang力扣leetcode 675.为高尔夫比赛砍树
54 0
|
6月前
|
搜索推荐 Java
单源最短路(只有一个起点)bfs,多源BFS,目录力扣675.为高尔夫比赛砍树,多源最短路问题:力扣542.01矩阵力扣1020.飞地的数量
单源最短路(只有一个起点)bfs,多源BFS,目录力扣675.为高尔夫比赛砍树,多源最短路问题:力扣542.01矩阵力扣1020.飞地的数量
【Leetcode -LCP44.开幕式焰火 -682.棒球比赛】
【Leetcode -LCP44.开幕式焰火 -682.棒球比赛】
35 0
力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数
力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数
151 0
力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数
|
Python
LeetCode 1688. 比赛中的配对次数
给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制
125 0
|
C++ Python
LeetCode每日一题题解:682. 棒球比赛-题解-python && C++源代码
LeetCode每日一题题解:682. 棒球比赛-题解-python && C++源代码
|
存储 测试技术
力扣第 287 场周赛 :输掉零场或一场比赛的玩家
给你一个整数数组 matches 其中 matches[i] = [winneri, loseri] 表示在一场比赛中 winneri 击败了 loseri 。
182 0
力扣第 287 场周赛 :输掉零场或一场比赛的玩家
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
128 2