题目链接:
模拟
使用变长数组对栈进行模拟。
- 如果操作是 + + +,那么访问数组的后两个得分,将两个得分之和加到总得分,并且将两个得分之和入栈。
- 如果操作是 D \rm D D,那么访问数组的最后一个得分,将得分乘以 2 2 2 加到总得分,并且将得分乘以 2 2 2 入栈。
- 如果操作是 C \rm C C,那么访问数组的最后一个得分,将总得分减去该得分,并且将该得分出栈。
- 如果操作是整数,那么将该整数加到总得分,并且将该整数入栈。
class Solution {
public:
int calPoints(vector<string>& ops) {
int ret = 0;
vector<int> points;
for (auto &op : ops) {
int n = points.size();
switch (op[0]) {
case '+':
ret += points[n - 1] + points[n - 2];
points.push_back(points[n - 1] + points[n - 2]);
break;
case 'D':
ret += 2 * points[n - 1];
points.push_back(2 * points[n - 1]);
break;
case 'C':
ret -= points[n - 1];
points.pop_back();
break;
default:
ret += stoi(op);
points.push_back(stoi(op));
break;
}
}
return ret;
}
};
注:
s
t
o
i
函数用于将字符串转换为
i
n
t
型整数,若返回值超过
i
n
t
的范围,会有
o
u
t
_
o
f
_
r
a
n
g
e
的异常。
\sf stoi函数用于将字符串转换为int型整数,若返回值超过int的范围,会有out\_of\_range的异常。
stoi函数用于将字符串转换为int型整数,若返回值超过int的范围,会有out_of_range的异常。