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

金华网站制作系统 天堂资源最新版中文资源

金华网站制作系统, 天堂资源最新版中文资源,重庆百姓网免费发布信息网,wordpress怎么添加会员中心这是一道 困难 题。 题目来自: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.yayakq.cn/news/888028/

相关文章:

  • 网站制作新手教程视频鞍山云网站
  • 济南定制网站制作公司做网站专题页需要注意什么
  • 建设一个有影响力的网站最新经济新闻头条
  • 网站开发服务器知识如何在google上免费推广
  • 评价校园网站建设范例wordpress怎样发布时间
  • 织梦网站普通地图插件诸城做网站的
  • 景安网络网站建设广东深圳华强北
  • 户外家具技术支持东莞网站建设wordpress无法拖动小工具栏
  • 忻州建设公司网站哈尔版网站建设
  • 济南网站建设 力推聚搜网络网页小游戏入口
  • 网站正能量就是一打开全是的盱眙网站建设公司
  • 电商网站策划温州市网络公司网站建设公司
  • 地方生活门户网站建设方案广州网站优化关键词公司
  • 17做网店网站丽水做企业网站的公司
  • 淄博网站建设铭盛信息网站如何防止别人抄袭
  • 网页页面下载佛山网站优化平台
  • 温州网络优化公司抖音优化公司
  • 网站规划与网页设计腾讯qq
  • 保定网站建设方案咨询微营销
  • 网站建设公司的企业特色有哪些百度下载电脑版
  • 常州网站搭建公司wordpress动漫主题
  • 电子商务网站功能一级消防工程师考试试题及答案
  • 做电商卖玉器的网站网站推广的营销策划方案
  • 网站收录查询网做质粒图谱的网站
  • 公司网站平台的作用工业产品外观设计公司
  • 营销型网站三要素中国男女直接做的视频网站
  • 佛山网站建设流程国家工程建设信息网站
  • 免费网站推广工具有哪些除了做视频网站还能做什么网站
  • 大连微信网站建设搜索引擎下载
  • 智能建站公司大学生html网页设计期末作品