码迷,mamicode.com
首页 > 编程语言 > 详细

leetcode 227. Basic Calculator II ---------- java

时间:2017-07-13 20:22:25      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:ssi   equals   ace   cat   style   war   color   运算   while   

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


带有+、-、*、/的运算。

 

与上一题累死,用栈做。

public class Solution {
    public int calculate(String s) {
        Stack<String> stack = new Stack();
        int start = 0;
        int num = 0;
        while (start < s.length()){
            char ch = s.charAt(start);
            if (Character.isDigit(ch)){
                num = num * 10 + ch - ‘0‘;
            } else if(ch == ‘ ‘ ){
                
            } else {
                if (!stack.isEmpty() && (stack.peek().equals("*") || stack.peek().equals("/"))){
                    String str = stack.pop();
                    int num2 = Integer.valueOf(stack.pop());
                    if (str.equals("*")){
                        num = num2 * num;
                    } else {
                        num = num2 / num;
                    }
                }
                stack.push(String.valueOf(num));
                stack.push(String.valueOf(ch));
                num = 0;
            }
            start++;
        }
        if (!stack.isEmpty() && (stack.peek().equals("*") || stack.peek().equals("/"))){
            String str = stack.pop();
            int num2 = Integer.valueOf(stack.pop());
            if (str.equals("*")){
                num = num * num2;
            } else {
                num = num2 / num;
            }
        }
        if (!stack.isEmpty() && stack.pop().equals("-")){
            num = -num;
        }
        while (stack.size() > 1){
            int num1 = Integer.valueOf(stack.pop());
            if (stack.pop().equals("-")){
                num1 = -num1;
            }
            num = num + num1;
        }
        if (!stack.isEmpty())
            return Integer.valueOf(stack.pop()) + num;
        else {
            return num;
        }
    }
}

 

 

 

public class Solution {
public int calculate(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;
}
}

 

leetcode 227. Basic Calculator II ---------- java

标签:ssi   equals   ace   cat   style   war   color   运算   while   

原文地址:http://www.cnblogs.com/xiaoba1203/p/7162044.html

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