LeetCode682.棒球比赛

题目链接:

682. 棒球比赛 - 力扣(LeetCode)

分析:简单的模拟问题,借助栈这个数据结构,可以达到事半功倍的效果。

算法思路:题目的本质是对一些数字进行计算再求和。我们定义一个栈,存储可能用到的所有数字。首先遍历整个字符串,取出每个字符串分别进行处理。如果是“+”,那么将栈顶的两个元素出栈,计算两者的和,再将他们依次入栈;如果是“D”,那么取出栈顶元素,将其double一下,再将结果入栈;如果是“C”,那么直接将栈顶元素出栈即可;否则一定是数字,这里推荐大家一个函数stoi(),可以直接将字符串转换成对应的整数,我们将该整数直接入栈即可。不断模拟上述的过程直到遍历完整个vector。

此时,所有需要的数字已经被存储在我们自己定义的栈当中,此时我们只要依次取出栈中的所有元素再求和即可。

代码参考如下:

class Solution {
public:
    int calPoints(vector<string>& operations) {
        stack<int>s;//定义一个栈 存储现有的数
        for(int i=0;i<operations.size();++i){//遍历字符串
            string temp=operations[i];//取出每个字符串
            if(temp=="+"){//如果是加号 模拟对应的加法操作
                int a=s.top();
                s.pop();
                int b=s.top();
                s.push(a);
                s.push(a+b);
            }else if(temp=="D"){//模拟对应的double操作
                int a=s.top();
                s.push(a*2);
            }else if(temp=="C"){//模拟对应的弹出操作
                s.pop();
            }else{//存储对应的整数
                int a=stoi(temp);//stoi函数的作用是将字符串直接转换成对应的整数
                s.push(a);
            }
        }
        int res=0;//定义最终的结果
        while(!s.empty()){//遍历整个栈 累加求值
            res+=s.top();
            s.pop();
        }
        return res;//返回结果
    }
};

  • 16
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值