当前位置: 首页 > news >正文

湖南城乡建设部网站济南网络推广公司

湖南城乡建设部网站,济南网络推广公司,记事本做网站如何添加图片,看网站建设公司的网站案例这是一道 困难 题。 题目来自:leetcode 题目 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意: 不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 提示: s 由数字、‘’、‘-’…

这是一道 困难 题。

题目来自:leetcode

题目

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

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

提示:

  • s 由数字、‘+’、‘-’、‘(’、‘)’、和 ’ ’ 组成
  • s 表示一个有效的表达式
  • +’ 不能用作一元运算(例如, “+1” 和 “+(2 + 3)” 无效)
  • 输入中不存在两个连续的操作符
  • 每个数字和运行的计算将适合于一个有符号的 32位 整数

示例 1:

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

示例 2:

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

示例 3:

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

解题思路

这道题是 实现一个包含“加减乘除”的基本计算器 的扩展,在表达式中增加了 括号 “(”, “)”正负数,但是删除了 “*” 和 “/”。

在原来的解题方法中补充以下几点:

  1. 括号的处理:
    • 如果遇到左括号:直接压入操作符栈。
    • 如果遇到右括号:将操作符栈中左括号后面的所有操作符出栈,并与数字栈进行计算合并。
  2. 正负数的处理:
    • 可以使用 补0 的思路,在正负数前面加一个“0”,将表达式转换为没有正负号的式子。

那么如何确定“+”和“-”是代表算符还是正负号呢?

  1. 如果 “+”和“-” 是第一个非空字符,那么代表是正负号。
  2. 如果 “+”和“-” 的前一个非空字符也是“+”或者“-”,那么代表是正负号。
  3. 如果 “+”和“-” 的前一个非空字符是 左括号 ,那么代表是正负号。

:补0的思路只能用于加减法.

代码实现


class Solution {private Deque<Integer> numStack = new LinkedList<>();private Deque<Character> optStack = new LinkedList<>();public int calculate(String s) {int n = s.length();boolean needZero = true;for(int i = 0; i < n; i++){char ch = s.charAt(i);if(this.isNumber(ch)){int num = 0;needZero = false;while(i < n && this.isNumber(s.charAt(i))){num = num * 10 + s.charAt(i) - '0';i++;}numStack.push(num);i--;}else if(ch == ' '){continue;}else if(ch == '('){optStack.push('(');needZero = true;continue;}else if(ch == ')'){while(optStack.peek() != '('){this.calc(numStack, optStack);}// 删除左括号optStack.pop();needZero = false;}else{if(needZero){numStack.push(0);}while(!optStack.isEmpty() && optStack.peek() != '('){this.calc(numStack, optStack);}optStack.push(ch);needZero = true;}}while(!optStack.isEmpty()){this.calc(numStack, optStack);}return numStack.pop();}private boolean isNumber(char ch){return ch >= '0' && ch <= '9';}private void calc(Deque<Integer> numStack, Deque<Character> optStack){int num2 = numStack.pop();int num1 = numStack.pop();char opt = optStack.pop();if(opt == '+'){  numStack.push(num1 + num2);}else{numStack.push(num1 - num2);}}}

复杂度分析

时间复杂度:O(N)O(N)O(N),N 为字符串长度。

空间复杂度:O(N)O(N)O(N),N 为字符串长度。

http://www.hotlads.com/news/4620.html

相关文章:

  • 做网站怎么接业务免费建站免费网站
  • 网站建设大概费用软文接单平台
  • 很多搜索词网站怎样做怎样制作网页
  • 广州宣传片制作公司谷歌优化教程
  • 二次元主题wordpressseo免费优化网站
  • 人防工程做资料的网站网站安全检测工具
  • 网页制作下载什么软件疫情二十条优化措施
  • 杭州seo建站产品怎么在网上推广
  • 药房网站模板推广软文是什么
  • asp.net网站制作视频教程如何做好线上推广
  • 国外优秀电商设计网站网站制作优化
  • 英文外贸网站设计优化大师班级优化大师
  • 重庆慕尚网站建设清远网站seo
  • 苍南最好的网站建设公司优化设计的答案
  • 神华科技 网站建设杭州seo论坛
  • 无线播放电视的浏览器seo推广外包企业
  • 深圳极速网站建设报价网站建设软件
  • 做pcr查基因序列的网站中小企业网站优化
  • 网站目录做跳转建站开发
  • 中卫网站制作公司报价百度电脑版官方下载
  • 网站里的活动专题栏怎么做网站服务器速度对seo有什么影响
  • 国家税务总局网上办税服务厅登录苏州seo建站
  • 购物网站有哪些平台推广计划书怎么写
  • 做四级题目的网站个人网页设计
  • 专业做鞋子的网站吗苏州seo怎么做
  • nba最新消息windows优化大师软件介绍
  • 人力资源网站开发说明书百度官方客户端
  • 青岛网站建设有限公司拼多多seo 优化软件
  • 中国内地服务器连接美国和香港的网站快吗今日国际新闻10条
  • 如何做花店网站seo标题优化步骤