zoukankan      html  css  js  c++  java
  • 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
        }
    
    }
  • 相关阅读:
    卷积神经网络之ResNet网络模型学习
    进程调度
    进程基础知识
    顺序栈链栈
    图的基本概念和术语
    关系数据库SQL复习
    关系数据库域关系演算语言QBE
    关系数据库元组关系演算语言ALPHA
    关系数据库关系模型、数据结构、完整性、关系代数
    数据库数据模型和系统结构
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13121345.html
Copyright © 2011-2022 走看看