[Leetcode] Basic Calculator
2015-08-31 19:56
309 查看
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
evalbuilt-inlibraryfunction.
这个问题应该是比较亲切了!但是任然出现了超时问题,原因在于list的使用,list是使用链表实现的,随机存取效率不高,在这里当数据量比较大的时候,效率骤降,改用vector作为存储的基本单位。
代码如下:
importjava.util.*;
publicclassSolution{
//使用list效率应该是更低一些,在这里竟然会超时!!!!!!!!!!!
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
privateVector<String>getSeg(Strings){
s=s.trim();
Vector<String>segment=newVector<String>();
intpre=0,i=0;
while(i<s.length()){
charc=s.charAt(i);
switch(c){
case'':
i++;
break;
case'(':
case')':
case'+':
case'-':
segment.add(s.substring(i,i+1));
i++;
break;
default:
intendindex=i+1;
while(endindex<s.length()&&Character.isDigit(s.charAt(endindex))){
endindex++;
}
segment.add(s.substring(i,endindex));
i=endindex;
break;
}
}
returnsegment;
}
publicintcalculate(Strings){
Stack<Character>op=newStack<Character>();
Stack<Integer>data=newStack<Integer>();
Vector<String>segments=getSeg(s);
for(inti=0;i<segments.size();i++){
Stringseg=segments.get(i);
intopc=seg.charAt(0);
if(opc<='9'&&opc>='0'){
data.push(Integer.parseInt(seg));
}else{
switch(opc){
case'(':
op.push((char)opc);
break;
case'-':
case'+':
if(!op.isEmpty()&&op.peek()!='('){
intdata1=data.pop();
intdata2=data.pop();
charopthis=op.pop();
intresdata=0;
if(opthis=='+')resdata=data1+data2;
elseresdata=data2-data1;
data.push(resdata);
}
op.push((char)opc);
break;
case')':
while(op.peek()!='('){
intdata1=data.pop();
intdata2=data.pop();
charopthis=op.pop();
intresdata=0;
if(opthis=='+')resdata=data1+data2;
elseresdata=data2-data1;
data.push(resdata);
}
op.pop();
break;
}
}
}
while(!op.isEmpty()){
intdata1=data.pop();
intdata2=data.pop();
charopthis=op.pop();
intresdata=0;
if(opthis=='+')resdata=data1+data2;
elseresdata=data2-data1;
data.push(resdata);
}
returndata.pop();
}
}
相关文章推荐
- java学习个人笔记---java内存管理之Java对象的引用方式
- C语言--变量的存储
- FI中替代和校验的几个相关函数
- HDU3435A new Graph Game(KM最小费用圈覆盖)
- 使用VMware WorkStation安装fedora出现section does not end with %%end错误的解决
- 石子归并问题(nyoj737)
- 社説 20150831 地熱発電 豊富な資源を有効活用しよう
- 关于JSONArray明明添加add JSONObject却为空
- Fortran向C传递NULL值
- QT5中QString与char *的相互转换
- 专家来谈下置换贴图,法线贴图和凹凸贴图的区别
- centos下安装gitlab
- HDOJ1272 小希的迷宫(并查集)
- 线程安全的简单的通用的cache
- 【bzoj1600】【USACO2008 Oct】Building A Fence 建造栅栏
- 【bzoj2111】【zjoi2010】【perm排列计数】【dp+Lucas定理】
- gcd,lcm HDU4497
- TCP 的那些事儿(下)
- 进制
- 专家来谈下置换贴图,法线贴图和凹凸贴图的区别