首页 > 其他分享 >LeetCode224 基本计算器

LeetCode224 基本计算器

时间:2022-10-15 02:00:07浏览次数:80  
标签:LeetCode224 基本 int 题解 复杂度 括号 location && 计算器

 

idea:刚开始是打算分类讨论,建立了数字栈和字符栈,按照传入字符当时两个栈的基本情况分类,结果讨论完之后分类太麻烦,导致分析完了之后漏洞不少。我觉得这道题难点在于括号和负号的处理,一开始将导致计算机出错的情况当成了重点,所以思路错了。

idea:下面的题解是遇到一个数处理一个数,无论该数是在括号里边还是外边,都将其按照括号展开后的情况直接加或减进行处理。在这里编者运用了sign记录了每一个数前边的符号情况,并且考虑了连续数字在字符串中的处理,如12+14实际上是五个字符

 

题解:

class Solution { public:     int calculate(string s) {          stack<int> ops;  //建立栈,仅用来储存当前位置的数字在括号展开后的实际符号情况         ops.push(1);    //基础符号默认为+         int sign = 1;     //默认为+
        int ret = 0;    //当前得数         int n = s.length();           int i = 0;         while (i < n) {             if (s[i] == ' ') {                 i++;             } else if (s[i] == '+') {                   sign = ops.top();    //“+”对sign值不产生影响                 i++;             } else if (s[i] == '-') {                   sign = -ops.top();  //“-”要变号                 i++;             } else if (s[i] == '(') {                 ops.push(sign);    //遇到左括号将当前基础符号压入栈,即如果括号前是“-”,将“-1”入栈,在括号里边遇到“-”时sign为“+1”,遇到“+”是sign为“-1”。括号前是“+”,则与主式基础符号相同                 i++;             } else if (s[i] == ')') {    //遇到右括号说明括号结束,将括号中的基础符号弹出栈                 ops.pop();                 i++;             } else {          //遇到数字则开始计算                 long num = 0;      //计算当前遇到的数字实际大小,例如连续遇到字符'3'和'5',实际上为35,则num记为int值35                 while (i < n && s[i] >= '0' && s[i] <= '9') {  //考虑遇到连续字符的情况,即参与运算的不一定都是个位数,在这里用一个循环继续遍历后续的数字字符                     num = num * 10 + s[i] - '0';      //百位*100,十位*10,个位*1                     i++;                 }                 ret += sign * num;           //根据sign值判断是加上当前数还是减去             }         }         return ret;
    } };

 

复杂度分析

时间复杂度:O(n)O(n),其中 nn 为字符串 ss 的长度。需要遍历字符串 ss 一次,计算表达式的值。

空间复杂度:O(n)O(n),其中 nn 为字符串 ss 的长度。空间复杂度主要取决于栈的空间,栈中的元素数量不超过 nn。

 

明天再看其他的题解,没想到一道题做到半夜两点,结果连答案都分析了好半天才看懂

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:LeetCode224,基本,int,题解,复杂度,括号,location,&&,计算器
From: https://www.cnblogs.com/Ting-LOVE/p/16793448.html

相关文章

  • 基本类型拓展知识
    浮点数拓展浮点数分为float和double浮点数所表示出来的数是有限的,是接近数但是不等于数;所以浮点数是不能用来作比较的作比较可以用BigDecimal(教学工具类)publicclassS......
  • java简易两数计算器
    publicclasscalculator{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intt=1;while(t=......
  • java的基本语法(关键字到变量)
    关键字定义:在java程序中被赋予特殊含义的英文单词特点:关键字所有的字母都为小写标识符定义:凡是可以自己起名字的地方都叫标识符规则:1可以由26个字母,0~9,-,¥组成2不能以......
  • amfe-flexible 包设置rem的基本值
    下载安装:npmi-Samfe-flexiblegw:GitHub-amfe/lib-flexible:可伸缩布局方案 下载2个第三方包即可实现移动端适配amfe-flexible是配置可伸缩布局方案,主要是将1......
  • 爬虫的基本原理
    一、爬虫的基本原理网络爬虫的价值其实就是数据的价值,在互联网社会中,数据是无价之宝,一切皆为数据,谁拥有了大量有用的数据,谁就拥有了决策的主动权。爬虫聚合站点https://......
  • ES6 基本认识
    1、什么是ES6?ES6指的是ECMAScript6.0,是JavaScript语言的一个标准。其目标是使JavaScript可以用来编写复杂的大型的应用程序,成为企业级开发的语言。2、ES6与J......
  • MVC三层架构 基本认识
     MVC三层架构模式图 Model1.业务处理:业务逻辑(Service)2.数据持久层:CRUD(Dao)View1.展示数据2.提供连接发起Servlet请求(a,form,img...)Controller(Servlet)1.接受用户的......
  • 嵌入式(二)基本概念
    嵌入式系统包括:嵌入式系统设计的两个方面:实时,非实时非功能特性应予以重视......
  • 数理逻辑-基本概念
     什么是数理逻辑?    什么是命题可判断真假的陈述句         排中律         原子命题与复合命题      ......
  • 撬开多线程的大门——学习多线程必须掌握的基本概念
    1.进程进程的概念从字义上理解相对还是比较抽象的,但进程实际上对我们并不陌生,可以说它无时不刻的伴随着我们的生活。当你每天上班打开电脑,运行微信与好友通讯、运行浏览......