码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode: Basic Calculator II

时间:2015-12-19 13:40:16      阅读:156      评论: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.

没有括号,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;
    }
}

 

Leetcode: Basic Calculator II

标签:

原文地址:http://www.cnblogs.com/EdwardLiu/p/5058913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!