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

227. 基本计算器 II

一、题目

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

整数除法仅保留整数部分。

你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

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

示例 1:

输入:s = “3+2*2”
输出:7
示例 2:

输入:s = " 3/2 "
输出:1
示例 3:

输入:s = " 3+5 / 2 "
输出:5

二、思路

  • 直接模拟,先剔除空格
  • 两次循环,模拟先乘除 后加减 简单粗暴

三、代码

import java.util.LinkedList;
import java.util.List;class Solution {public int calculate(String s) {s = s.replaceAll(" ", "");//剔除空格List<String> sList = new ArrayList<>();StringBuilder sb = new StringBuilder();//避免频繁拼接字符串int length = s.length();for (int i = 0; i < length; i++) {char c = s.charAt(i);if (Character.isDigit(c)) {sb.append(c);} else {if (sb.length() > 0) {sList.add(sb.toString());sb.setLength(0);}sList.add(String.valueOf(c));}}if (sb.length() > 0) {sList.add(sb.toString());//最后那个数字}// 处理乘除for (int i = 0; i < sList.size();) {String code = sList.get(i);if (code.equals("*") || code.equals("/")) {// 获取前一个和后一个数字int num1 = Integer.parseInt(sList.get(i - 1));int num2 = Integer.parseInt(sList.get(i + 1));int result;if (code.equals("*")) {result = num1 * num2;} else {result = num1 / num2;}// 替换当前元素为结果,移除前两个元素sList.set(i - 1, String.valueOf(result));sList.remove(i);sList.remove(i);// 回退索引以处理可能的连续运算符i -= 1;} else {i++;}}// 计算加减int sum = Integer.parseInt(sList.get(0));int flag = 1; // 1加2减for (int i = 1; i < sList.size(); i++) {String code = sList.get(i);if (code.equals("+")) {flag = 1;} else if (code.equals("-")) {flag = 2;} else {int num = Integer.parseInt(code);sum = flag == 1 ? sum + num : sum - num;}}return sum;}
}
http://www.xdnf.cn/news/4951.html

相关文章:

  • Tomcat 日志体系深度解析:从访问日志配置到错误日志分析的全链路指南
  • VUE2课程计划表练习
  • 推送到Gerrit时报错,缺少Change-Id
  • component :is是什么?
  • 多轴钻孔组合机床设计与关键技术研究
  • 【nestjs】一般学习路线
  • 嵌入式学习笔记 - 关于单片机的位数
  • 基于AQS实现Reentrantlcok
  • 【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题
  • LeetCode百题刷002摩尔投票法
  • 镜头内常见的马达类型(私人笔记)
  • Nginx静态资源增加权限验证
  • CurrentHashMap的整体系统介绍及Java内存模型(JVM)介绍
  • 单位代码签名证书是什么?如何申请?
  • 开平机:从原理到实践的全面技术剖析
  • 【C/C++】范围for循环
  • ⭐️⭐️⭐️【课时1:大模型是什么?】学习总结 ⭐️⭐️⭐️ for《大模型Clouder认证:基于百炼平台构建智能体应用》认证
  • 【el-admin】el-admin关联数据字典
  • 访问网站提示“不安全”“有风险”怎么办?
  • HarmonyOS NEXT 免费无广告看电影app:从想法到实现的经验总结
  • AI与自然语言处理(NLP):从BERT到GPT的演进
  • Python字典:数据操作的核心容器
  • 单调栈所有模版(2)
  • 19、HashTable(哈希)、位图的实现和布隆过滤器的介绍
  • 报考消防设施操作员需要满足什么条件?
  • 【Python 字典(Dictionary)】
  • 【Pandas】pandas DataFrame all
  • levelDB的数据查看(非常详细)
  • 摩斯密码详解
  • 基于论文《大规模电动汽车充换电设施可调能力聚合评估与预测》开发者说明文档