题目内容
你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。
比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops
,其中 ops[i]
是你需要记录的第 i
项操作,ops
遵循下述规则:
- 整数
x
- 表示本回合新获得分数x
"+"
- 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。"D"
- 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。"C"
- 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
请你返回记录中所有得分的总和。
初始思路
遍历字符串列表ops
- 整数x 直接加入分数列表ans
- “+” scores列表最后两个数的和置入列表
- “D” scores列表最后一个数的两倍置入ans
- 移除scores列表的最后一个数
考虑用vector<int>实现ans列表
class Solution {
public:
int calPoints(vector<string>& operations) {
int n = operations.size();
vector<int> ans;
int len = ans.size();
for(int i = 0; i < n; i++)
{
len = ans.size();
if(operations[i] == '+')
{
ans.push_back(ans[len - 1] + ans[len - 2]);
}
else if(operations[i] == 'C')
{
ans.pop_back();
}
else if(operations[i] == 'D')
{
ans.push_back(2 * ans[len - 1]);
}
else
{
ans.push_back((int)operations[i]);
}
}
int sum = 0;
len = ans.size();
for(int i = 0; i < len; i++)
{
sum += ans[i];
}
return sum;
}
};
出现问题
ops是
字符串列表,operations[i] == '+'表达式错误
(int)operations[i]实际上并不能将operations[i]转换为整数
解决办法
由于除整数外字符串长度都为1,所以直接将operations[i][0]比较
采用stoi函数
class Solution {
public:
int calPoints(vector<string>& operations) {
int n = operations.size();
vector<int> ans;
int len = ans.size();
for(int i = 0; i < n; i++)
{
len = ans.size();
if(operations[i][0] == '+')
{
ans.push_back(ans[len - 1] + ans[len - 2]);
}
else if(operations[i][0] == 'C')
{
ans.pop_back();
}
else if(operations[i][0] == 'D')
{
ans.push_back(2 * ans[len - 1]);
}
else
{
ans.push_back(stoi(operations[i]));
}
}
int sum = 0;
len = ans.size();
for(int i = 0; i < len; i++)
{
sum += ans[i];
}
return sum;
}
};
标签:operations,int,ans,back,len,力扣,棒球,size,682
From: https://blog.csdn.net/weixin_75069317/article/details/140385335