• LeetCode -- 682 棒球比赛


    题目:
    你现在是棒球比赛记录员。 给定一个字符串列表,每个字符串可以是以下四种类型之一:
    1.整数(一轮的得分):直接表示您在本轮中获得的积分数。 2. "+"(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。 3. "D"(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。 4. "C"(一个操作,这不是一个回合的分数):表示您获得的最后一个有效 回合的分数是无效的,应该被移除。 每一轮的操作都是永久性的,可能会对前一轮和后一轮产生影响。 你需要返回你在所有回合中得分的总和。 输入输出:

    示例 1:

    输入: ["5","2","C","D","+"]
    输出: 30
    解释:
    第1轮:你可以得到5分。总和是:5。
    第2轮:你可以得到2分。总和是:7。
    操作1:第2轮的数据无效。总和是:5。
    第3轮:你可以得到10分(第2轮的数据已被删除)。总数是:15。
    第4轮:你可以得到5 + 10 = 15分。总数是:30。
    示例 2:

    输入: ["5","-2","4","C","D","9","+","+"]
    输出: 27
    解释:
    第1轮:你可以得到5分。总和是:5。
    第2轮:你可以得到-2分。总数是:3。
    第3轮:你可以得到4分。总和是:7。
    操作1:第3轮的数据无效。总数是:3。
    第4轮:你可以得到-4分(第三轮的数据已被删除)。总和是:-1。
    第5轮:你可以得到9分。总数是:8。
    第6轮:你可以得到-4 + 9 = 5分。总数是13。
    第7轮:你可以得到9 + 5 = 14分。总数是27。

    题目感悟:

    这道题真的简单,但是也在这道题中收获了芝士(知识),有必要记录一下,啊哈~

    1:c++ 中 的c_str()用法:生成一个const char* 指针

    Before we go on , it is important to note here that 题目中给的是一个string 类型的 vector 而 c++ 中有string 类型, 但是! c 语言中 没有,所以 这里引出了 C++ 中的c_str() 用法,为了与C语言兼容。

    通过string类对象的成员函数c_str() 把 string 对象转化为c语言字符串样式

    注意::一定要使用strcpy()函数来操作c_str()返回的指针。

    实践结果:

    我们发现,如果用c指针的话,导致的错误是不可想象的,指针的值,会随着s的改变而改变

    所以要推荐使用strcpy函数

    这样就避免了之前的错误。

    2:C语言的atoi()函数

    atoi 其实就是 ASCII to integer 

    描述:atoi(const char *str) 用来把参数 str 所指向的字符串转化为一个 int 型 ,notice! 这里的形参 是 const char str 类型 ,这也就是我在使用 c_str() 的原因了,为了兼容C语言 ,将string 类型 转化成 char 类型的字符串。

    实践代码:

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>   // 注意一下:这是需要引入的库文件喔~
    
    using namespace std;
    int main()
    {
        const char*c;
        string s ="1234";
    
        char*p = new char[20];
        
        strcpy(p, s.c_str());
        int k = atoi(p);
        cout << k << endl; // 成功将 string 类型转化为数字
        
     } 

    OK啦,这就是这道题里学到的,现在附上这道题代码:(很简单,用到栈,这里就不在说思路了)

    class Solution {
    public:
        int calPoints(vector<string>& ops) {
            stack<int> sta;
            int sum = 0;
            for(int i = 0 ; i < ops.size() ; i ++)
            {
                if(ops[i] == "+")
                {
                    int a = sta.top();
                    sta.pop();
                    int b = sta.top();
                    sta.pop();
                    sta.push(b);
                    sta.push(a);
                    sta.push(a+b);
                }
                
                else if(ops[i] == "D"){
                    // sta.push( (ops[i-1] - '0')*2);
                    int c = sta.top();
                    sta.push(c*2);
                }
                
                else if(ops[i] == "C"){
                    sta.pop();
                } 
                
                else{
                    // cout << ops[i] << endl;
                    // char * str = NULL;
                    // *str = ops[i];
                    char k[20];
                    // i = atoi(ops[i].c_str());
                    strcpy(k,ops[i].c_str());
                    int kk = atoi(k);
                    cout << k << endl;
                     sta.push(kk);
                } 
            }
            
            while(!sta.empty())
            {
                sum+=sta.top();
                sta.pop();
            }
            return sum;
        }
    };
  • 相关阅读:
    HDU 3697贪心
    HDU 3226 背包
    numpy_2nd 新建矩阵的五种方法 array zeros empty arange().reshape()
    numpy_1st 属性 ndim,shape,size
    CV学习笔记第二课(上)
    33. 搜索旋转排序数组 二分法
    35. 搜索插入位置 今天就是二分法专场
    34.在排序数组中查找元素的第一个和最后一个位置 二分法
    CV第三课
    CV第二课(下)
  • 原文地址:https://www.cnblogs.com/wtzmz/p/13680663.html
Copyright © 2020-2023  润新知