class Solution {
public:
//利用堆栈实现基本运算,对给定的字符串进行轮训,如果是数字则进行循环累积,直到不为数字,则考虑如何将数字压入堆栈。
//如果之前记录的flag操作符是+或者-号,则将该数字压入到堆栈中,如果是操作符是*或者/号,则将栈顶元素取出之后与当前数字进行运算,将运算结果保存到堆栈中。最后堆栈中所保存的数字之间均为+运算关系,则只需要将堆栈中的数字进行累加即可获得运算结果值。" 3+5 / 2 "
int calculate(string s) {
stack<int> nums;
int temp;
char flag='+';
/*保存上一个运算符。当前数字怎样放进去,看上一个运算符。
如果是+,直接放;
如果-,加-号放数据;
如果*,和栈顶元素乘积再放;
如果/,和栈顶元素进行除法运算再放。*/
for(int i=0;i<s.size();i++)
{
char c=s[i];
if(c>='0'&&c<='9')
temp=temp*10+int(c-'0');
//不是数字的时候才会进行下面的操作,根据上一次符号,判断此时怎样放入数据,在放好数据之后,保存当前符号。
if((!(c>='0'&&c<='9')&&c!=' ')||i==(s.size()-1))
{
if(flag=='-')
nums.push(-1*temp);
else if(flag=='+')
nums.push(temp);
else if(flag=='*')
{
temp=temp*nums.top();
nums.pop();
nums.push(temp);
}
else
{
temp=nums.top()/temp;
nums.pop();
nums.push(temp);
}
flag=s[i];
temp=0;
}
}
int ret=0;
while(!nums.empty())
{
ret+=nums.top();
nums.pop();
}
return ret;
}
};
leetcode 227: Basic Calculator II
最新推荐文章于 2022-08-29 13:11:23 发布