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

算法-字符串-227.基本计算器||

一、题目

二、思路解析

        1.思路:

             使用解决;

             使最后压入栈中的数值它们最终的运算关系是“+”!!!

        2.常用方法:

                1.Character.isDigit(“1”);判断一个给定的字符是否为数字字符(0 - 9

Character.isDigit(ch)

                2.replaceAll(参数1,参数2);将字符串中的参数1全部替换为参数2

s=s.replaceAll("  ","");

 

        3.核心逻辑:

                1.去除掉字符串中的空格

s=s.replaceAll("  ","");

                2.特殊情况处理,当字符串为空或不存在则直接返回值0

if(s==null||s.length()==0)return 0;

                 3.一般情况:对字符串进行循环,判断当前字符是否为数字字符;如果是,即存储该数值;如果不是,即为运算符

                针对不同的运算符有不同的处理方式:

                        a.加法:直接压入栈中

                        b.减法:压入栈中的值取反

                        c.乘法:将栈顶元素弹出并于当前所记录的数值进行*,然后在压入栈中

                        d.除法:将栈顶元素弹出并于当前所记录的数值进行/,然后在压入栈中

                √.注意事项:

                        a.压入栈中的数值的时机是遍历到其后面的运算符

                        b.特殊的情况在于遍历到该字符串的最后一个字符时,必然是数字字符,所以当i==s.length()-1成立时,也会触发压入操作

三、代码实现

class Solution {
    public int calculate(String s) {
          // 去除空格
        s = s.replaceAll(" ", "");
        char[] charArray = s.toCharArray();
        int n = charArray.length;
        // 用于存储操作数
        Stack<Integer> stack = new Stack<>();
        // 当前数字
        int num = 0;
        // 上一个运算符,初始化为'+'
        char op = '+';
        for (int i = 0; i < n; i++) {
            char c = charArray[i];
            if (Character.isDigit(c)) {
                num = num * 10 + (c - '0');
            }
            if (!Character.isDigit(c) || i == n - 1) {
                switch (op) {
                    case '+':
                        stack.push(num);
                        break;
                    case '-':
                        stack.push(-num);
                        break;
                    case '*':
                        stack.push(stack.pop() * num);
                        break;
                    case '/':
                        stack.push(stack.pop() / num);
                        break;
                }
                num = 0;
                if (i < n - 1) {
                    op = c;
                }
            }
        }
        // 计算栈中所有元素的和
        int result = 0;
        while (!stack.isEmpty()) {
            result += stack.pop();
        }
        return result;
    }
}


http://www.kler.cn/a/429254.html

相关文章:

  • .Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
  • 深入理解 D3.js 力导向图:原理、调参与应用
  • ASP.NET Core WebApi接口IP限流实践技术指南
  • 传统摄像头普通形态的系统连接方式
  • Ubuntu 安装和配置 MariaDB
  • STM32 FreeRTOS移植
  • 【Innodb阅读笔记】之行记录格式(Redundant)
  • GPU渲染图形的步骤和流程
  • SAP 汇率维护OB08和对应配置,以及取值BAPI<转载>
  • Weiss 机器人电动夹爪,重塑工业自动化精密操作
  • Linux:信号的预备和产生
  • 【AI 探索之旅:从基础认知到前沿突破的深度游二】学习大模型前的准备
  • NLP-中文分词
  • Git仓库移除文件的暂存和修改
  • 【计算机网络】实验18:动态主机配置协议DHCP的作用
  • 前端工程化面试题目常见
  • ros项目dual_arm_pick-place(urdf文件可视化查看)
  • 设计模式----链式设计
  • 如何在 JavaScript 中设置定时器?
  • 2024-09 GESP C++ 一级试题及答案解析
  • 使用Jackson库的ObjectMapper类将Java对象转换为JSON格式
  • 数据结构之五:排序
  • ubuntu18.04升级到20.04
  • Web后端开发技术:RESTful 架构详解
  • 聚观早报 | 华为Mate 70开售;小米15 Ultra影像大升级
  • HDFS的架构优势与基本操作