zoukankan      html  css  js  c++  java
  • leetcode刷题笔记 224题 基本计算器

    leetcode刷题笔记 224题 基本计算器

    源地址:224. 基本计算器

    问题描述:

    实现一个基本的计算器来计算一个简单的字符串表达式的值。

    字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。

    示例 1:

    输入: "1 + 1"
    输出: 2
    示例 2:

    输入: " 2-1 + 2 "
    输出: 3
    示例 3:

    输入: "(1+(4+5+2)-3)+(6+8)"
    输出: 23
    说明:

    你可以假设所给定的表达式都是有效的。
    请不要使用内置的库函数 eval。

    //使用栈搭配模式匹配处理
    import scala.collection.mutable
    object Solution {
        def calculate(s: String): Int = {
            //存储()情况
            val stack = new mutable.Stack[Int]()
            //当前计算结果
            var res = 0
            //操作数
            var operand = 0
            //符号正负情况
            var sign = 1
            //println(s.replace(" ",""))
            
            //需注意对空格的处理
            for (i <- 0 to s.length-1) {
                val ch = s.charAt(i)
                ch match {
                    //加法
                    case '+' => {
                        //println("operand: " + operand)
                        res += sign * operand
                        sign = 1
                        operand = 0
                    }
                    //减法
                    case '-' => {
                        //println("operand: " + operand)
                        res += sign * operand
                        sign = -1
                        operand = 0
                    }
                    //左括号 当前res和符号入栈 重新计算
                    case '(' => {
                        stack.push(res)
                        stack.push(sign)
                        res = 0
                        sign = 1
                    }
                    //右括号 计算括号内部值 将之前保存的值弹出 参于计算
                    case ')' => {
                        res += sign * operand
                        res *= stack.pop()
                        res += stack.pop()
                        operand = 0
                        sign = 1
                    }
                    //空字符处理
                    case ' ' =>
                    //
                    case _ => {
                        operand = 10 * operand + (ch - '0').toInt
                        //println(operand)
                    }          
                }
            }
            
            return res + sign * operand
        }
    }
    
  • 相关阅读:
    oracle一次插入多条数据
    SQL在in中传入参数类型问题
    斗鱼刷弹幕定时
    在setTimeout 200ms后执行函数发生错误
    Java去除字符串中的空格
    同步与异步
    HTTP请求中GET和POST的区别
    SQL优化
    什么是死锁以及避免死锁
    常用快捷键
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13791665.html
Copyright © 2011-2022 走看看