• 227. Basic Calculator II


    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.

    Example 1:

    Input: "3+2*2"
    Output: 7
    

    Example 2:

    Input: " 3/2 "
    Output: 1

    Example 3:

    Input: " 3+5 / 2 "
    Output: 5
    

    Note:

    • You may assume that the given expression is always valid.
    • Do not use the eval built-in library function.
    class Solution {
        public int calculate(String s) {
            if(s==null || (s.length())==0) return 0;
            Stack<Integer> stack = new Stack<Integer>();
            char lastsign = '+';
            int num = 0;
            int le = s.length();
            
            for(int i = 0; i < le; i++){
                char c = s.charAt(i);
                
                if(Character.isDigit(c)) num = num * 10 + c - '0';
                if(!Character.isDigit(c) && c != ' ' || i == le - 1){
                    switch (lastsign){
                        case '+': stack.push(num);
                            break;
                        case '-': stack.push(-num);
                            break;
                        case '*': stack.push(stack.pop() * num);
                            break;
                        case '/': stack.push(stack.pop() / num);
                            break;
                    }
                    lastsign = c;
                    num = 0;
                }
            }
            int res = 0;
            for(int i: stack) res += i;
            return res;
        }
    }

    屌 https://leetcode.com/problems/basic-calculator-ii/discuss/63003/Share-my-java-solution

    还有不用stack的方法:

    public class Solution {
        public int calculate(String s) {
                if(s == null || s.length() == 0) {
                    return 0;
                }
    
                s = s.trim();
    
                int prevNum = 0;
                int sum = 0;
                char prevOp = '+';
    
                for(int i = 0; i < s.length(); i++) {
                    char c = s.charAt(i);
                    if(c == ' ') continue;
                    if(Character.isDigit(c)) {
                        int val = c - '0';
                        while(i + 1 < s.length() && Character.isDigit(s.charAt(i+1))) {
                            val = val * 10 + (s.charAt(i+1) - '0');
                            i++;
                        }
                        if (prevOp == '+') {
                            sum += prevNum;
                            prevNum = val;
                        } else if (prevOp == '-') {
                            sum += prevNum;
                            prevNum = -val;
                        } else if (prevOp == '*') {
                            prevNum = prevNum * val;
                        } else if (prevOp == '/') {
                            prevNum = prevNum/val;
                        }
                    } else {
                        prevOp = c;
                    }
                }
    
                sum += prevNum;
                return sum;
            }
    }
  • 相关阅读:
    Vulnhub系列:Tomato(文件包含getshell)
    Linux基础之终端、控制台、tty、pty简介说明
    linux服务器之间传输文件的四种方式
    Vulnhub系列:Os-hackNos
    [GXYCTF2019]BabyUpload
    CVE-2018-12613
    [MRCTF2020]Ez_bypass
    [BUUCTF 2018]Online Tool
    [BJDCTF 2nd]fake google
    [网鼎杯 2020 青龙组]AreUSerialz
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11909489.html
Copyright © 2020-2023  润新知