Leetcode--Java--224. 基本计算器

题目描述

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

样例描述

示例 1:

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

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

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

思路

表达式求值 (通用模板题)
在这里插入图片描述

  1. 维护一个栈,如果遇到数就直接压入栈。遇到左括号也压入栈,遇到右括号将左括号之前的全算完。
  2. 遇到运算符的话,首先定义运算符的优先级如下,保证能够区分即可。
    在这里插入图片描述
    如果当前运算符优先级小于等于栈顶优先级,则计算栈顶,算完会有新的栈顶,然后压入栈中(继续比较然后计算,while循环过程)
    如果当前运算符大于栈顶优先级,则压入栈中。
    表达式求值的通用模板的整体流程如下:
    在这里插入图片描述
  3. 由于数和字符的类型不一样,需要用两个栈表示。一个存数,一个存运算符。
  4. 细节由于第一个数可能是负数,为了减少边界判断。先往 nums 添加一个 0。(也可以开始直接给s加个括号,然后变成下面的细节处理,在循环逻辑中处理掉)
  5. 细节防止 () 内出现的首个字符为运算符,将所有的空格去掉,并将 (- 替换为 (0-,(+ 替换为 (0+,在循环中处理这个细节。
  6. java函数名过长,为方便可以封装Character.isDigit这个方法,可以将字符串转化为字符数组方便索引里面的值。

代码

class Solution {
   
    Deque<Integer> nums = new LinkedList<>();
    Deque<Character> ops = new LinkedList<>();
    public int calculate(String s) {
   
        // //防止第一个数是负数,先加入一个0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值