首页 > 其他分享 >计算器III

计算器III

时间:2024-07-06 19:31:29浏览次数:1  
标签:calculate int sign queue num 计算器 III stack

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

整数除法仅保留整数部分。

你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 

提示:

  • 1 <= s.length <= 3 * 105
  • s 由整数和算符 ('+', '-', '*', '/', '(', ')') 组成,中间由一些空格隔开
  • s 表示一个 有效表达式
  • 表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内
  • 题目数据保证答案是一个 32-bit 整数
/**
 * 给你一个数学表达式,含有+、-、*、/、()
 * 参与运算的都是非负整数
 * "1 + 1" = 2
 * " 6-4 / 2 " = 4
 * "2*(5+5*2)/3+(6/2+8)" = 21
 * "(2+6* 3+5- (3*14/7+2)*5)+3"=-12
 */
public class Calculator {

    public static void main(String[] args) {
        System.out.println(calculate("1+1"));
        System.out.println(calculate("6-4 / 2"));
        System.out.println(calculate("2*(5+5*2)/3+(6/2+8)"));
        System.out.println(calculate("(2+6* 3+5- (3*14/7+2)*5)+3"));
    }

    public static int calculate(String s) {
        Queue<Character> queue = new LinkedList<Character>();
        for(char c : s.toCharArray()) {
            queue.add(c);
        }
        return doCalculate(queue);
    }

    private static int doCalculate(Queue<Character> queue) {
        Stack<Integer> stack = new Stack<Integer>();
        char sign = '+';
        int num = 0;
        while (!queue.isEmpty()) {
            //出队
            char c = queue.poll();
            if (Character.isDigit(c)) {
                num = 10 * num + Character.getNumericValue(c);
            }
            // 遇到左括号开始递归计算 num
            if (c == '(') {
                num = doCalculate(s);
            }
            if ((!Character.isDigit(c) && c != ' ') || s.isEmpty()) {
                if (sign == '+') {
                    stack.push(num);
                } else if (sign == '-') {
                    stack.push(-num);
                } else if (sign == '*') {
                    stack.push(stack.pop() * num);
                } else if (sign == '/') {
                    stack.push(stack.pop() / num);
                }
                num = 0;
                sign = c;
            }
            // 遇到右括号返回递归结果
            if (c == ')') {
                break;
            }
        }
        int res = 0;
        for (int i : stack) {
            res += i;
        }
        return res;
    }
}

 

标签:calculate,int,sign,queue,num,计算器,III,stack
From: https://www.cnblogs.com/zhengbiyu/p/18287628

相关文章

  • 使用WebSocket和C语言实现一个简单的计算器
    在现代Web开发中,WebSocket已经成为实时通信的重要工具。本文将介绍如何使用WebSocket与C语言结合,实现一个简单的计算器应用。我们将通过Go语言作为中间层,调用C语言编写的计算函数,并通过WebSocket与前端进行交互。在使用本文章代码开发过程中遇到问题,可参考博主的另外两篇博客......
  • 用HTML做计算器
    用HTML做计算器前言开肝创建基础框架构思修饰全部代码最后前言由于上节课我们学习了html,今天我们就来练习一下。开肝创建基础框架首先,我们先创建一个新文本文档,并把后缀名改为.html。右键,打开方式,选择vscode编辑器。vscode界面出现,按下英文问号,一个基础的框......
  • LeetCode 算法:路径总和 III c++
    原题链接......
  • html+JavaScript+css 24点计算器
    源代码    采用穷举计算方法讲人话:根据四个数随机列算式,算出来是24就显示在列表里。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">&l......
  • 在使用基于Pytorch的DeeplabV3+模型(Bubbliiiing)训练以及预测时遇到的问题
    原博:憨批的语义分割重制版9——Pytorch搭建自己的DeeplabV3+语义分割平台-CSDN博客github:https://github.com/bubbliiiing/deeplabv3-plus-pytorch最近在使用Bubbliiing的deeplabv3+模型对自己的数据集进行训练时,使用博主提供的json_to_dataset.py对labelme标注的数据进行......
  • 【课程设计】基于python的一款简单的计算器
    我们是大二本科生团队,主力两人耗时3天完成了这款计算器的制作。希望大家给我们多多引流!!!!!!欢迎各位优秀的高考学子报考长安大学,报考长安大学电子信息工程专业。欢迎有志于就读信息与通信工程和计算机科学与技术的准研究生报考长安大学!注意:文件我已经打包好了!长安大学直属国家......
  • UCOS-III 系统配置
    1.µC/OS-III功能配置(os_cfg.h)os_cfg.h用于确定应用程序所需的µC/OS-III功能,详细如下: 1.1杂项OS_CFG_APP_HOOKS_EN:启用/禁用应用程序特定的钩子。OS_CFG_ARG_CHK_EN:启用/禁用参数检查。OS_CFG_CALLED_FROM_ISR_CHK_EN:启用/禁用中断服务程序(ISR)检查。OS_CFG_DB......
  • 16_简单计算器实现
    02_简单计算器实现publicclassDemo{publicstaticvoidmain(String[]args){intflag=0;while(flag!=5){System.out.println("选择加法请按1,2,3,4"+"\t"+"退出请按5");Scannerscanne......
  • 修复《Call of Duty: Black Ops III(使命召唤3)》DLL损坏问题:确保游戏体验顺畅的详尽方
    《CallofDuty:BlackOpsIII》(使命召唤:黑色行动3)是一款由Treyarch开发、动视发行的未来战争题材第一人称射击游戏,设定在2065年的近未来,玩家扮演高科技装备的超级士兵,参与紧张激烈的单人战役与多人对战,还包括标志性的丧尸模式。如果你遇到《CallofDuty:BlackOpsIII》......
  • 代码随想录算法训练营第46天 | 121. 买卖股票的最佳时机 、122.买卖股票的最佳时机II
    股票问题是一个动态规划的系列问题,前两题并不难,第三题有难度。买卖股票的最佳时机视频讲解:https://www.bilibili.com/video/BV1Xe4y1u77qhttps://programmercarl.com/0121.买卖股票的最佳时机.html/***@param{number[]}prices*@return{number}*/varmaxProfit=......