这个鸟玩意用了迭代,其实不太好浪费空间,数据多了还容易死,有人用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; } } }