题目:
你现在是棒球比赛记录员。 给定一个字符串列表,每个字符串可以是以下四种类型之一: 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; } };