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;
        }
}



相关文章
|
1月前
|
Go
golang力扣leetcode 675.为高尔夫比赛砍树
golang力扣leetcode 675.为高尔夫比赛砍树
33 0
|
20天前
|
搜索推荐 Java
单源最短路(只有一个起点)bfs,多源BFS,目录力扣675.为高尔夫比赛砍树,多源最短路问题:力扣542.01矩阵力扣1020.飞地的数量
单源最短路(只有一个起点)bfs,多源BFS,目录力扣675.为高尔夫比赛砍树,多源最短路问题:力扣542.01矩阵力扣1020.飞地的数量
|
8月前
【Leetcode -LCP44.开幕式焰火 -682.棒球比赛】
【Leetcode -LCP44.开幕式焰火 -682.棒球比赛】
20 0
力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数
力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数
122 0
力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数
|
Python
LeetCode 1688. 比赛中的配对次数
给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制
91 0
|
C++ Python
LeetCode每日一题题解:682. 棒球比赛-题解-python && C++源代码
LeetCode每日一题题解:682. 棒球比赛-题解-python && C++源代码
|
存储 测试技术
力扣第 287 场周赛 :输掉零场或一场比赛的玩家
给你一个整数数组 matches 其中 matches[i] = [winneri, loseri] 表示在一场比赛中 winneri 击败了 loseri 。
147 0
力扣第 287 场周赛 :输掉零场或一场比赛的玩家
|
11天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
11天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题