题目:
思路:首先题目是要做一个计分系统,我个人认为这道题目的难度在于1、理解计分方式 2、对vector的熟悉程度,vector的函数特性可以很简化这道题,如pop_back
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Solution {
public:
int calPoints(vector<string>& ops) {
vector<int> sco;
int score = 0;
int sum = 0;
for(string str : ops){
if(str == "+"){
score = sco.back() + sco[sco.size()-2];
sco.push_back(score);
sum += score;
}
else if(str == "C"){
sum -= sco.back();
sco.pop_back();
}
else if(str == "D"){
score = sco.back() * 2;
sco.push_back(score);
sum += score;
}
else{
score = stoi(str);//string转int
sco.push_back(score);
sum += score;
}
}
return sum;
}
};
int main(){
Solution s;
string ops[5] = { "5","3","C","D","+" };
vector<string> res(ops,ops+5);
int m = s.calPoints(res);
cout << m <<endl;
system ("pause");
return 0;
}
简化代码
class Solution {
public:
int calPoints(vector<string>& ops) {
vector<int> sco;
int score;
int sum = 0;
for(string str : ops){
score = 0;
if(str == "C"){
sum -= sco.back();
sco.pop_back();
continue;//注意,这里的continue很重要【可以试着去掉它单步调试就会发现会有什么问题】
}
else if(str == "+") sum += score = sco.back() + sco[sco.size()-2];
else if(str == "D") sum += score = sco.back() * 2;
else sum += score = stoi(str);
sco.push_back(score);
}
return sum;
}
};