首页 > 其他 > 详细

Basic Calculator II

时间:2015-10-30 02:27:44      阅读:322      评论:0      收藏:0      [点我收藏+]

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.

?

public class Solution {
    public int calculate(String s) {
        if (s == null || s.length() == 0) {
        	return 0;
        }
        Stack<Integer> num = new Stack<>();
        Stack<Character> symbol = new Stack<>();
        s += "#";
        boolean isNum = false;
        int cnt = 0;
        for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i) == ‘ ‘) {
				continue;
			}
			char charAt = s.charAt(i);
			if (Character.isDigit(charAt)) {
				cnt = cnt * 10 + (charAt - ‘0‘);
				isNum = true;
			} else {
				if (isNum) {
					num.push(cnt);
					cnt = 0;
					isNum = false;
					if (!symbol.isEmpty() && (symbol.peek() == ‘*‘ || symbol.peek() == ‘/‘)) {
						char pop = symbol.pop();
						int b = num.pop();
						int a = num.pop();
						if (pop == ‘*‘) {
							num.push(a * b);
						} else {
							num.push(a / b);
						}
					}
				}
				if (charAt != ‘#‘) {
					symbol.push(charAt);
				}
			}
		}
        if (!symbol.isEmpty()) {
        	int tmp = 0;
        	while (!symbol.isEmpty()) {
        		Character pop = symbol.pop();
        		int a = num.pop();
        		if (pop == ‘+‘) {
        			tmp += a;
        		} else {
        			tmp -= a;
        		}
        	}
        	num.push(tmp + num.pop());
        }
        return num.pop();
    }
}

?

Basic Calculator II

原文:http://hcx2013.iteye.com/blog/2253009

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!