• 224. Basic Calculator


    package LeetCode_224
    
    import java.util.*
    
    /**
     * 224. Basic Calculator
     * https://leetcode.com/problems/basic-calculator/description/
     *
     * Implement a basic calculator to evaluate a simple expression string.
    The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
    
    Example 1:
    Input: "1 + 1"
    Output: 2
    
    Example 2:
    Input: " 2-1 + 2 "
    Output: 3
    
    Example 3:
    Input: "(1+(4+5+2)-3)+(6+8)"
    Output: 23
    
    Note:
    You may assume that the given expression is always valid.
    Do not use the eval built-in library function.
     * */
    class Solution {
    
        private val operator = listOf("+", "-")
    
        fun calculate(s: String): Int {
            val stack = Stack<String>()
            var i = s.length - 1
            while (i >= 0) {
                if (s[i]==' '){
                    i--
                    continue
                }
                if (s[i] == ')' || s[i] == '+' || s[i] == '-') {
                    stack.push(s[i].toString())
                } else if (s[i] == '(') {
                    val sum = getSum(stack)
                    stack.pop()
                    stack.push(sum.toString())
                } else {
                    val intSB = StringBuilder()
                    //pick out the digit, for example:10
                    while (i >= 0 && s[i].isDigit()) {
                        intSB.insert(0,s[i--])
                    }
                    i++//prevent lose some operator, so need go back, for example: 2-1 + 2
                    stack.push(intSB.toString())
                }
                i--
            }
            //result = getSum(stack)
            return getSum(stack)
        }
    
        private fun getSum(stack: Stack<String>): Int {
            var sign = "+"
            var total = 0
            while (stack.isNotEmpty() && stack.peek() != "(" && stack.peek() != ")") {
                if (stack.peek() in operator) {
                    sign = stack.pop()
                } else {
                    val temp = stack.pop().toInt()
                    total += if (sign == "+") temp else -temp
                }
            }
            return total
        }
    
    }
  • 相关阅读:
    Django(28)Django模板介绍
    Django(27)Django类视图添加装饰器
    HTTP协议-返回结果的HTTP状态
    HTTP协议二
    HTTP协议 一
    HTTP 协议用于客户端和服务器端之间 的通信
    Net分布式系统之一:系统整体框架介绍
    数据结构-实现正负数重新排序
    数据结构-合并两个已经排序的数组
    数据结构-查找第一个没有重复的数组元素
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13121345.html
Copyright © 2020-2023  润新知