• 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;
    }
    }
  • 相关阅读:
    MySQL大表优化方案
    写一个简单脚本检测mysql主从是否正常
    Nginx配置基于ip的虚拟主机
    推荐一些好的linux学习网站
    shell基础入门(一)
    centos7和linux防火墙配置入门
    centos7.0之vsftpd随笔
    获取系统相关属性
    linux 文件管理操作入门
    ANSI文件操作
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/7162044.html
Copyright © 2020-2023  润新知