首页 > 其他分享 >leetcode227. 基本计算器 II

leetcode227. 基本计算器 II

时间:2024-11-22 13:15:27浏览次数:3  
标签:break leetcode227 压入 II num let 加号 计算器 stack

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

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

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

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

示例 1:

输入:s = "3+2*2"
输出:7

示例 2:

输入:s = " 3/2 "
输出:1

示例 3:

输入:s = " 3+5 / 2 "
输出:5
//   /**
//  * @param {string} s
//  * @return {number}
//  */
//    写一个计算器功能的代码

// 这个题的重点在于:不应该是找到加号的时候做什么,而应该是找到乘号的时候,才知道我这个加号他加了个谁?

// 因为这个乘号的优先级要比比加号的优先级要大,

// 找到后一个运算符号的时候,才知道知道前面一个符号到底是做一个什么操作 

// 这个就是运算符优先级的问题创建一个栈,假如拿一个算式:例子一:

// 当我们要判断 前面这个符号的时候,要找到下一个符号;所以用一个标识位pre 记录当前的符号,默认设为加号

// 然后将这个数字压入栈里面,比如压入3,接着判断运算符号,如果是一个加法,我们在算式前面放一个0,计算0+3;

// 接着把2压入栈里面,箭头往后移动,此时指向乘号,他的优先级大于加号,当我们遇到乘号,我们不去做加法,我们拿到栈顶元素

// 乘以 乘号后面的元素,乘完以后,再给他压入栈中;加入后面还有很多,一顿判断,最后遍历算式,把栈里面所有的元素拿出来

// 最后算一个总和。
var calculate = function (s) {
    s = s.trim();
    let stack = new Array();
    let preSign = '+';
    let num = 0;
    for (let i = 0; i < s.length; i++) {
        if (!isNaN(s[i]) && s[i] !== ' ') {
            num = num * 10 + Number(s[i]);
        }
        if (isNaN(s[i]) || i == s.length - 1) {
            switch (preSign) {
                case '+':
                    stack.push(num);
                    break;
                case '-':
                    stack.push(-num);
                    break;
                case '*':
                    stack.push(stack.pop() * num);
                    break;
                default:
                    stack.push(stack.pop() / num | 0);
                    break;
            }
            preSign = s[i];
            num = 0;
        }
    }
    return stack.reduce((a, b) => a + b);
};

标签:break,leetcode227,压入,II,num,let,加号,计算器,stack
From: https://blog.csdn.net/Turboyiyi/article/details/143971555

相关文章

  • 用函数实现:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的
    完整的题目在这里哈:用函数实现:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。要求字符串str只包含数字、大写或小写字母。例如,调用fun_delet()函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为:eABCDFGH.     时......
  • CODESYS可视化标准计算器制作详细案例(四)
    #制作一个在可视化界面可用于标准计算器功能详细案例#前言:我用PLC做了一套标准计算器算法,数学都是从1+1开始的,很遗憾关于此案例的前几篇文章没有多少人浏览,但是这个在CODESYS中运行的“计算器”程序代码功能,我是思考和研究了好几天的(个人总体觉得较难处理)。目前修复了已知......
  • Java项目实战II基于微信小程序的课堂助手(开发文档+数据库+源码)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。一、前言在信息化教学日益普及的今天,如何更高效地辅助课堂学习,成为了教育技术......
  • Java项目实战II基于微信小程序的书橱系统(开发文档+数据库+源码)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着数字化时代的到来,阅读方式虽日趋多元......
  • Java项目实战II基于微信小程序的高校寻物平台(开发文档+数据库+源码)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言在快节奏的校园生活中,物品遗失与寻找成为......
  • Java项目实战II基于微信的设备故障报修管理系统(开发文档+数据库+源码)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言在现代企业管理中,设备故障报修的及时性和......
  • C语言之实现简单的表达式计算器
    C语言之实现简单的表达式计算器这篇博文是对上一篇博文代码的重构!并在此基础上加了一个eval_express函数,实现表达式的交互计算,初步达到REPL,即读表达式、算表达式、输出结果,这样一个循环。定义表达式数据类型和输出函数Express结构体,用来保存表达式的节点数据,运算符或数......
  • 【八大高校联合举办】第四届人工智能与智能制造国际研讨会(AIIM 2024)
    大会网站:https://ais.cn/u/ZVRF3m【投稿参会】截稿时间:以官网信息为准出版信息:IEEE出版(已确定ISBN号),IEEEXplore,EICompendex,Scopus 稳定检索主办单位:成都信息工程大学征稿主题:1、智能制造2、人工智能3、机械工程4、控制工程5、智能机器人6、其他相关主题均可......
  • LCR 022. 环形链表 II(中等)(主站142)
    https://leetcode.cn/problems/c32eOV/https://leetcode.cn/problems/linked-list-cycle-ii/难度:☆☆☆题目:给定一个链表,返回链表开始入环的第一个节点。从链表的头节点开始沿着next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回null。为了表示给定......
  • Newstarctf2024 Week3 Reverse-SecertsOfKawaii
    下载附件,是一个apk文件想着用夜神模拟器打开,但是说什么与版本不兼容,懒得再去配置了直接放到jeb里分析吧,因为不知道这个apk运行起来长啥样,就随便点点找启动类(java学的不太好哈哈)看到了一个onclick,应该是输入flag后,通过onclick调用类似“check”是否相等点击这个lambda$.........