//取vector作为一个栈,然后不断读取和pop。先把乘积或商算好再存入栈中
//ps.好久没有不参考别的直接自己写出AC代码了...各种bug...果然要好好练...
//1.考虑空格情况;2.考虑数位情况;3.考虑index的边界情况
class Solution {
public:
int calculate(string s) {
int len=s.length();
vector<char> stack;
int first =0;
int second=0;
int temp;int bit=0;
int flag;
for(int i=0;i<len;i++)
{
if(s[i]<=‘9‘&&s[i]>=‘0‘)
stack.push_back(s[i]);
else if(s[i]==‘-‘||s[i]==‘+‘)
stack.push_back(s[i]);
else if(s[i]==‘/‘||s[i]==‘*‘)
{
first=0;second=0;bit=0;flag=i;
while(stack.back()<=‘9‘&&stack.back()>=‘0‘)
{
first=first+(stack.back()-‘0‘)*pow(10,bit++);
stack.pop_back();
}
i++;bit=0;
while((s[i]<=‘9‘&&s[i]>=‘0‘)||s[i]==‘ ‘)
{
if(s[i]==‘ ‘)
{
i++;
if(i==len)break;
else continue;
}
second=second*10+(s[i]-‘0‘);
i++;
if(i==len)break;
else if(s[i]<‘0‘||s[i]>‘9‘)
{
i--;break;
}
}
if(s[flag]==‘/‘)
temp=first/second;
else if(s[flag]==‘*‘)
temp=first*second;
if(temp==0)
{
stack.push_back(‘0‘);
continue;
}
vector<char>tmp;
while(temp>0)
{
tmp.push_back((temp%10)+‘0‘);
temp=temp/10;
}
while(!tmp.empty())
{
stack.push_back(tmp.back());
tmp.pop_back();
}
if(i==len)break;
}
}
int result=0;bit=0;
first=0;second=0;
while(!stack.empty())
{
if(stack.back()<=‘9‘&&stack.back()>=‘0‘)
{
first+=(stack.back()-‘0‘)*pow(10,bit++);
stack.pop_back();
}
else
{
bit=0;
if(stack.back()==‘+‘)
result+=first;
else
result-=first;
stack.pop_back();
first=0;
}
}
result+=first;
return result;
}
};
版权声明:本文为博主原创文章,未经博主允许不得转载。
[Leetcode]Basic Calculator II
原文:http://blog.csdn.net/yang_snow/article/details/46909883