2021年04月10日 周六 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
1. 题目简介
2. 题解
2.1 只处理加减(迭代;本题要求)
核心思想:遍历的同时进行计算。 由于只有加减法,所以直接从前到后进行计算,要注意的就是括号的处理:遇到 “(” ,则将前一个数和运算符压入栈中,遇到 “)” ,则把它们取出来,和括号里计算的结果相加(符号也可能是减号)。
class Solution {
public:
int calculate(string s) {
vector<int> nums;
int sign='+';
int num = 0;
for(int i=0;i<s.size();++i){
char c = s[i];
// 是数字,计算数字的值
if(isdigit(c)) num = num*10+(c-'0');
// 是运算符,对前一个数和运算符进行处理
if(!isdigit(c) && !isspace(c) || i==s.size()-1){
switch(sign){
case '+':nums.push_back(num);break;
case '-':nums.push_back(-num);break;
case '*':nums.back()*=num;break;
case '/':nums.back()/=num;break;
}
nu