/* * 227.Basic Calculator II * 2016-6-13 by Mingyang * 这个题目跟I不同的地方就在于,这里是需要stack的,这里是先遇到符号,把sign等于刚才遇到的符号 * 然后再继续加减,就是无论正负都先存入stack再说--微软onsite的题目 */ public int calculate1(String s) { int len; if(s==null || (len = s.length())==0) return 0; Stack<Integer> stack = new Stack<Integer>(); int num = 0; char sign = '+'; for(int i=0;i<len;i++){ if(Character.isDigit(s.charAt(i))){ num = num*10+s.charAt(i)-'0'; } if((!Character.isDigit(s.charAt(i)) &&' '!=s.charAt(i)) || i==len-1){ if(sign=='-'){ stack.push(-num); } if(sign=='+'){ stack.push(num); } if(sign=='*'){ stack.push(stack.pop()*num); } if(sign=='/'){ stack.push(stack.pop()/num); } sign = s.charAt(i); num = 0; } } int re = 0; for(int i:stack){ re += i; } return re; }