[LeetCode] Basic Calculator 基本计算器
2015-06-12 02:30
501 查看
Implementabasiccalculatortoevaluateasimpleexpressionstring.
Theexpressionstringmaycontainopen
Youmayassumethatthegivenexpressionisalwaysvalid.
Someexamples:
Note:Donotusethe
这道题让我们实现一个基本的计算器来计算简单的算数表达式,而且题目限制了表达式中只有加减号,数字,括号和空格,没有乘除,那么就没啥计算的优先级之分了。于是这道题就变的没有那么复杂了。我们需要一个一维的符号数组来记录加减号,然后我们开始遍历字符串表达式,如果遇到的是数字,则从符号数组中取出最后一个符合和数字运算后更新结果,如果遇到右括号,则移除一个符号,如果遇到的不是空格,即有可能是加减号或是左括号,则符号数组中加1或-1,做个判断,如果是负号,加个-1,其他情况加1。代码如下:
参考资料:
https://leetcode.com/discuss/39532/easy-18-lines-c-16-lines-python
https://leetcode.com/discuss/39509/ac-c-solution-with-two-stacks
LeetCodeAllinOne题目讲解汇总(持续更新中...)
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
evalbuilt-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;
}
};
参考资料:
相关文章推荐
- locate,nl命令
- Android实时获取电量
- kill,killall,top,free,vmstat,iostat,watch命令
- kill,killall,top,free,vmstat,iostat,watch命令
- [转载]memcached stats 命令
- [转载]memcached stats 命令
- hdu 1671&&poj 3630 Phone List 【字典树】
- 在ubuntu上编译chrome
- 在ubuntu上编译chrome
- Android实时获取网络信号
- Android开发-网络通信1
- iOS文件路径操作
- [.net 面向对象编程基础] (19) LINQ基础
- Red Hat Linux 下命令行界面与图形界面的切换
- 3Sum Closest
- vsftpd,tftp安装配置
- vsftpd,tftp安装配置
- U-Boot启动过程完全分析
- U-Boot启动过程完全分析
- Linux命令详解之六-杂项命令大聚合