zoukankan      html  css  js  c++  java
  • leetcode 227. Basic Calculator II ---------- java

    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;
    }
    }
  • 相关阅读:
    FileManager(文件管理类)
    XE6 IntraWeb.v14.0.32安装及破解指南
    在应收应付系统凭证做冲销后,如何取消冲销?
    delphi将图片保存到SQL数据库和读取图片
    去掉cxgrid 中的过滤下拉箭头
    CxGrid 分组以后自动排序了,可以禁止自动排序吗
    最简单解决CHM文件无法显示的办法
    用友T3、T6常见问题
    SQL2005还原数据库3154错误
    cxGrid 怎样才能让不自动换行 WordWrap:=false
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/7162044.html
Copyright © 2011-2022 走看看