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

【百日算法计划】:每日一题,见证成长(026)

题目

给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,,/ 四种运算符和空格 。 整数除法仅保留整数部分。 * *
示例 1:
输入: “3+2X2”
输出: 7


import java.util.Stack;public class Code {public int calculate(String s) {Stack<Integer> data_stack = new Stack<>();Stack<Character> char_stack = new Stack<>();int length = s.length();int i = 0;while (i < length){char c = s.charAt(i);if (c == ' '){ //空格直接跳过i++;} else if (checkNumber(c)){ //如果是数字,处理如多个数字的情况 如333+1中的333int tmp = 0;while (i < length && checkNumber(s.charAt(i))){tmp = tmp * 10 + (s.charAt(i) - '0');i++;}data_stack.push(tmp);} else if (c == '('){ //左括号 直接入栈char_stack.push(c);i++;} else if (c == ')'){ //右括号 出栈计算 直到碰到'('为止while (!char_stack.isEmpty() && char_stack.peek() != '('){fetchAndCol(data_stack,char_stack);}char_stack.pop(); //弹出'('i++;} else {//如果字符栈为空 或者 运算字符 优先级 大于 栈顶字符,则运算字符直接入栈if (char_stack.isEmpty() || checkChar(c,char_stack.peek())){char_stack.push(c);} else {//优先级: 运算字符 <= 栈顶字符 ,则拿数字栈的前两个数字和栈顶字符栈计算,并把结果压入数字栈while (!char_stack.isEmpty() && !checkChar(c,char_stack.peek())){fetchAndCol(data_stack,char_stack);}char_stack.push(c); //最后再把字符入字符栈}i++;}}//如果字符栈不为空,则开始最后的计算,最后数字栈里只有一个最后计算的结果while (!char_stack.isEmpty()){fetchAndCol(data_stack,char_stack);}return data_stack.pop();}//计算数字栈和运算符栈public void fetchAndCol(Stack<Integer> data_stack,Stack<Character> char_stack){Integer pop1 = data_stack.pop();Integer pop2 = data_stack.pop();Character pop = char_stack.pop();Integer math = math(pop1, pop2, pop);data_stack.push(math);}public Integer math(Integer number1,Integer number2,char c){if (c == '+') return number1 + number2;if (c == '-') return number2 - number1;if (c == '*') return number1 * number2;if (c == '/') return number2 / number1;else return -1;}public boolean checkChar(char c,char top){if ((c == '*' || c == '/') && (top == '+' || top == '-')) return true;if (top == '(') return true; //栈顶运算符是'(' 也是返回trueelse return false;}//判断是否是数字public boolean checkNumber(char c){if (c >= '0' && c <= '9') return true;else return false;}
}
http://www.lryc.cn/news/487518.html

相关文章:

  • 【大模型】prompt实践总结
  • 在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】
  • 本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程
  • Ubuntu常见命令
  • 网络安全领域的最新动态和漏洞信息
  • 华为开源自研AI框架昇思MindSpore应用案例:人体关键点检测模型Lite-HRNet
  • 每日OJ题_牛客_天使果冻_递推_C++_Java
  • 独立站干货:WordPress主机推荐
  • 支持多种快充协议和支持多种功能的诱骗取电协议芯片
  • Android中常见内存泄漏的场景和解决方案
  • MyBatis Plus中的@TableId注解
  • java基础概念33:常见API-Objects工具类
  • 脚手架vue-cli,webpack模板
  • 什么是React Native?
  • Three.js LOD(Level of Detail)通过根据视距调整渲染细节的技术
  • Vulnhub靶场案例渗透[12]-Grotesque: 1.0.1
  • 招聘和面试
  • Gin 框架入门(GO)-1
  • LeetCode:700. 二叉搜索树中的搜索
  • 用邻接矩阵实现图的深度优先遍历
  • vue2中实现token的无感刷新
  • 无需Photoshop即可在线裁剪和调整图像大小的工具
  • 云安全之法律和合规
  • 倒计时功能分享
  • 【论文分享】使用多源数据识别建筑功能:以中国三大城市群为例
  • 华为手机启用ADB无线调试功能
  • 云原生之Kubernetes集群搭建
  • STM32单片机CAN总线汽车线路通断检测
  • 大连理工大学概率上机作业免费下载
  • Tomcat 如何管理 Session