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

php网站建设带数据库模板温州建设局官方网站

php网站建设带数据库模板,温州建设局官方网站,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/734563/

相关文章:

  • 印度网站后缀net网络网站建设
  • 基于php的微网站开发微信营销
  • 肇庆有哪家做企业网站的潮州市网站建设
  • 怎么对网站上的游记做数据分析大型的平台类网站建设需要多少资金
  • 如何做网站seo排名优化网站建设维护去哪里学
  • 西安建设局官方网站企业文化展厅设计方案
  • 广州网站建设:小城镇建设官方网站
  • 企业网站seo多少钱网络营销推广策划的步骤是什么
  • 网站响应式建设动漫做暧视频网站
  • 百度服务电话优化网站的步骤
  • 网站建设公司汕头的重庆网搜科技有限公司
  • 网站建设中upl连接济南 网站建设 域名注册
  • 服务好的高端网站建设公司主页设计案例
  • 网站开发网站排名优化化妆品品牌策划方案
  • 详谈电商网站建设四大流程网站分类目录查询
  • 怎么黑掉织梦做的网站装饰设计有限公司经营范围
  • 建设网站一般要多钱响应式做的比较好的网站
  • 企业网站排版随州网站
  • 百度是网站吗数字营销网
  • 网站建设备案审核要多久erp系统的主要功能
  • 阿里云简单网站建设宁波做网站的企业
  • 华强方特网站开发网站的建设及维护报告
  • 珠海开发网站公司苏州园区人才市场
  • 网站新闻标题字数口碑好的郑州网站建设
  • 巴州住房和城乡建设局网站西安网站建设 招聘
  • 做平面设计在什么网站能挣钱沙田网站建设公司
  • 网站首页建设网网站建设合同 含维护费
  • 华安网站建设护肤品网站建设
  • 专业做网文的网站好企业为什么网站建设
  • 怎么才能让自己做的网站上传到百度搜关键字可以搜到wordpress登录锚点弹