标签:
Implement a basic calculator to evaluate a simple expression string. The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero. You may assume that the given expression is always valid. Some examples: "3+2*2" = 7 " 3/2 " = 1 " 3+5 / 2 " = 5 Note: Do not use the eval built-in library function.
没有括号,pass两遍, 第一遍, 先解决乘除并把操作数和操作符都放到stack里, 第二遍, 做加减.
public class Solution { public int calculate(String s) { if (s==null || s.length()==0) return 0; LinkedList<Integer> stack = new LinkedList<Integer>(); int num = 0; for (int i=0; i<s.length(); i++) { char c = s.charAt(i); if (Character.isDigit(c)) { num = num*10 + (int)(c-‘0‘); if (i<s.length()-1 && Character.isDigit(s.charAt(i+1))) continue; if (!stack.isEmpty() && (stack.peek()==2 || stack.peek()==3)) { int op = stack.pop(); int op1 = stack.pop(); int cur = 0; if (op == 2) cur = op1 * num; else if (op == 3) cur = op1 / num; stack.push(cur); } else stack.push(num); num = 0; } else if (c == ‘ ‘) continue; else { switch(c) { case ‘+‘: stack.push(0); break; case ‘-‘: stack.push(1); break; case ‘*‘: stack.push(2); break; case ‘/‘: stack.push(3); break; default: return -1; } } } Collections.reverse(stack); int res = stack.isEmpty()? 0 : stack.pop(); while (!stack.isEmpty()) { int op = stack.pop(); int op2 = stack.pop(); if (op == 0) res += op2; else if (op == 1) res -= op2; } return res; } }
标签:
原文地址:http://www.cnblogs.com/EdwardLiu/p/5058913.html