682棒球比赛

下面是题目

下面是题目给出的代码

1
2
3
4
5
class Solution {
public:
int calPoints(vector<string>& ops) {
}
};

因为是简单题,而且我思考的时候并没有发生很严重的卡壳,所以我只说几个要注意的细节

  • 是字符串数组!是字符串数组!是字符串数组! 所以在判断数字的时候还需要用一个字符串转化为数字的方法,我这里用了把数字判断放在最后,然后用stoi函数来解决这个问题
  • “+” 说的是前两项的和是当前项的值,那么如何才能取得前两项的和呢?我用很蠢的方法,就是先把栈顶的两个数取出来,求和,然后再把它们压栈,最后把他们的和压栈。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Solution {
public:
int calPoints(vector<string>& ops) {
stack<int>s;
int sum =0;
for(string n : ops)
{

if(!s.empty()&&n=="C")
{
int t1=s.top();
s.pop();
sum=sum-t1;
}
else if(!s.empty()&&n=="D")
{
int t2 = s.top();
s.push(t2*2);
sum=sum+t2*2;
}
else if(n=="+")
{
int f1= s.top();
s.pop();
int f2= s.top();
s.pop();
int temp = f1+f2;
sum+=temp;
s.push(f2);
s.push(f1);
s.push(temp);
}
else{
//我最后才判断是否为数字,因为stoi("A")是不成立的!
int k = stoi(n);
if(k>= -30000&&k<= 30000 )
{
s.push(k);
sum=sum+k;
}
}
}
return sum;
}
};
-------------本文结束,感谢您的阅读-------------