这个鸟玩意用了迭代,其实不太好浪费空间,数据多了还容易死,有人用stack还没研究 </br>
昨天代码有错误,num在运算后没有清零,有几个标点错误,在程序中红体,但是昨天date去了这个还是没有测,我肉眼debug的
这个是600mm的还没看明白
https://leetcode.com/discuss/39454/accepted-infix-postfix-based-solution-explaination-600ms
下面是我的半成品,巨傻逼
只能实现这种((()))
不能实现(())+()这种
自己想的判断配对要操作string好多次绝对会卡死
还在想,等我做好了再参考下别人的写个总结
public class Solution {
public int calculate(String s) {
int n = s.length();
int result = 0;
int num = 0;
int p = 0;
int pp = 0 ;
int L1 = s.indexOf('(');
int R1 = s.indexOf(')');
int op = 3;
int flag = 0;
int preflag = 0;
if(L1 >= 0 && R1 > 0 )
{
String b = s.substring(L1+1,R1-1);
return
calculate(s.substring(0,L1-1>0?L1-1:0)+ (calculate(b)+" ")+ s.substring(R1+1<n-1?R1+1:n-1,n-1));
}
else
{
for(int i=0 ;i < n ;i++)
{
if(s.charAt(i)=='+')
op = 1;
else if (s.charAt(i)=='-')
op = 2 ;
else if (s.charAt(i)==' ')
op = 0;
else if('0'<=(s.charAt(i))&& (s.charAt(i))<='9')
op= 3;
else
op = 0;
switch(op)
{
case 0 : break;
case 1 : pp = p;p = num; num = 0; preflag = flag ;flag = 1;break;
case 2 : pp = p;p = num; num = 0; preflag = flag ;flag = 2;break;
case 3 :
{
num = num*10+(s.charAt(i)-'0');
if(preflag==1)
p = pp + p;
else if(preflag == 2 )
p = pp -p ; break;
}
}
}
if(flag==0)
result = num+p ;
else if(flag==1)
result = p + num ;
else if(flag == 2)
result = p -num;
return result;
}
}
}