• LeetCode 227. Basic Calculator II


    原题链接在这里:https://leetcode.com/problems/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.

    题解:

    It could apply the generic method. Use two level of operations. Calculate * and / first, accumlate the result into num2.

    Then + and -, accumlate the result into num1. 

    When current char is digit, get the current number, perform * and /.

    If current char is * and /, update operator 2.

    If current char is + and -, perform previous + and - operation and update operator 1, reset num2, operator 2.

    Time Complexity: O(n). n = s.length().

    Space: O(1).

    AC Java:

     1 class Solution {
     2     public int calculate(String s) {
     3         if(s == null || s.length() == 0){
     4             return 0;
     5         }
     6         
     7         int num1 = 0;
     8         int o1 = 1;
     9         int num2 = 1;
    10         int o2 = 1;
    11         for(int i = 0; i<s.length(); i++){
    12             char c = s.charAt(i);
    13             if(Character.isDigit(c)){
    14                 int cur = c - '0';
    15                 while(i+1 < s.length() && Character.isDigit(s.charAt(i+1))){
    16                     cur = cur * 10 + s.charAt(i+1)-'0';
    17                     i++;
    18                 }
    19                 
    20                 num2 = o2 == 1 ? num2 * cur : num2 / cur;
    21             }else if(c == '*' || c == '/'){
    22                 o2 = c == '*' ? 1 : -1;
    23             }else if(c == '+' || c == '-'){
    24                 num1 = num1 + o1 * num2;
    25                 o1 = c == '+' ? 1 : -1;
    26                 
    27                 num2 = 1;
    28                 o2 = 1;
    29             }
    30         }
    31         
    32         return num1 + o1 * num2;
    33     }
    34 }

    类似Basic CalculatorBasic Calculator III.

  • 相关阅读:
    7.node.js的3DES 加密和解密的方法封装
    6.js 获取当前日期时间3种格式化方法
    2.深入解析Javascript异步编程
    5.js中的判断if和for
    4.js中的函数与方法
    String、StringBuffer、StringBuilder效率测试
    String、StringBuffer、StringBuilder区别
    StringBuffer常用方法
    SQL面试题
    String字符串拼接
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/4825018.html
Copyright © 2020-2023  润新知