您的位置:首页 > 其它

[LeetCode] Basic Calculator 基本计算器

2015-06-12 02:30 501 查看
Implementabasiccalculatortoevaluateasimpleexpressionstring.

Theexpressionstringmaycontainopen
(
andclosingparentheses
)
,theplus
+
orminussign
-
,non-negativeintegersandemptyspaces
.

Youmayassumethatthegivenexpressionisalwaysvalid.

Someexamples:

"1+1"=2
"2-1+2"=3
"(1+(4+5+2)-3)+(6+8)"=23

Note:Donotusethe
eval
built-inlibraryfunction.

这道题让我们实现一个基本的计算器来计算简单的算数表达式,而且题目限制了表达式中只有加减号,数字,括号和空格,没有乘除,那么就没啥计算的优先级之分了。于是这道题就变的没有那么复杂了。我们需要一个一维的符号数组来记录加减号,然后我们开始遍历字符串表达式,如果遇到的是数字,则从符号数组中取出最后一个符合和数字运算后更新结果,如果遇到右括号,则移除一个符号,如果遇到的不是空格,即有可能是加减号或是左括号,则符号数组中加1或-1,做个判断,如果是负号,加个-1,其他情况加1。代码如下:

classSolution{
public:
intcalculate(strings){
intres=0;
vector<int>sign(2,1);
for(inti=0;i<s.size();++i){
charc=s[i];
if(c>='0'){
intnum=0;
while(i<s.size()&&s[i]>='0'){
num=10*num+s[i++]-'0';
}
res+=sign.back()*num;
sign.pop_back();
--i;
}
elseif(c==')')sign.pop_back();
elseif(c!='')sign.push_back(sign.back()*(c=='-'?-1:1));
}
returnres;
}
};


参考资料:

https://leetcode.com/discuss/39532/easy-18-lines-c-16-lines-python

https://leetcode.com/discuss/39509/ac-c-solution-with-two-stacks

LeetCodeAllinOne题目讲解汇总(持续更新中...)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: