《算法通关村—计算器|逆波兰问题解析》

news2024/11/27 12:51:40

《算法通关村—计算器|逆波兰问题解析》

计算器问题

描述

LeetCode227.给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。

输入:s = "3+2*2" 
输出:7
  • 基本思路:理解题目,题目只能是加减乘除,那么加减乘除就有优先顺序,乘除先,加减后,所以在对元素进行压栈的时候乘除就直接计算了,然后把结果押入栈,最后统一进行加减,减转化为加,其实就是把数转换为负数就好。

代码

package AlgorithmForth;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * 计算器问题
 *  基本思路:理解题目,题目只能是加减乘除,那么加减乘除就有优先顺序,乘除先,加减后,所以在对元素
 *           进行压栈的时候乘除就直接计算了,然后把结果押入栈,最后统一进行加减,减转化为加,
 *           其实就是把数转换为负数就好。
 *   这道题其实有个难点没放出来,如果加了括号该如何处理???
 */
public class CalculateSolution {
    public static int calculate(String s){
        Deque<Integer> stack = new ArrayDeque<Integer>();
        char preSign = '+'; // 默认第一个数字的前面是加号
        int num = 0;
        int n = s.length();
        for(int i = 0;i < n; ++i){
            if(Character.isDigit(s.charAt(i))){
                num = num * 10 + s.charAt(i) - '0'; // 这里的原因是有的数字可能》=10所以要做乘10处理。
            }
            if(!Character.isDigit(s.charAt(i)) && s.charAt(i)!=' '||i==n-1){
                switch (preSign){
                    case '+':
                        stack.push(num);
                        break;
                    case '-':
                        stack.push(-num);
                        break;
                    case '*' :
                        stack.push(stack.pop()*num);
                        break;
                    default:
                        stack.push(stack.pop() / num);
                }
                preSign = s.charAt(i);
                num = 0;
            }
        }
        int ans = 0;
        while(!stack.isEmpty()){
            ans+=stack.pop();
        }
        return ans;
    }

    public static void main(String[] args) {
        String s = "5 + 100 * 3";
        System.out.println(calculate(s));
    }
}

逆波兰问题

描述

LeetCode150.根据 逆波兰表示法,求表达式的值。说明: 有效的算符包括+、-、*、/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 注意 两个整数之间的除法只保留整数部分。 可以保证给定的逆波兰表达式总是有效的。也即表达式总会得出有效数值且不存在除数为 0 的情况。

示例1: 
输入:tokens = ["2","1","+","3","*"] 
输出:9 解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9  
输入:tokens = ["4","13","5","/","+"] 
输出:6 解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

代码

package AlgorithmForth;

import java.util.Stack;

/**
 * 逆波兰表达式
 */
public class ReversePolishNotation {
    public static int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for (String token : tokens) {
            if (!Character.isDigit(token.charAt(0)) && token.length() == 1) {
                /**
                 * 运算符,从栈中取出两个数进行运算
                 */
                int b = stack.pop();
                int a = stack.pop();
                switch (token) {
                    /**
                     * 根据运算符的种类进行计算
                     * 将结果直接入栈
                     */
                    case "+":
                        stack.push(a + b);
                        break;
                    case "-":
                        stack.push(a-b);
                        break;
                    case "*":
                        stack.push(a*b);
                        break;
                    case "/":
                        stack.push(a/b);
                        break;
                }
            }else{
                /**
                 * 整数直接入栈
                 */
                stack.push(Integer.parseInt(token));
            }
        }
        return stack.pop();
    }

    public static void main(String[] args) {
        String[] tokens = {"123","456","+","123","-" };
        System.out.println(evalRPN(tokens));
    }
}

近期在自学 Java 做项目,加入了一个编程学习圈子,里面有编程学习路线和原创的项目教程,感觉非常不错。还可以 1 对 1 和大厂嘉宾交流答疑,也希望能对大家有帮助,扫 ⬇️ 二维码即可加入。

在这里插入图片描述

也可以点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?

也可以加我QQ(2837468248)咨询说明来意!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1146477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.1 计算机安全概念

思维导图&#xff1a; 前言&#xff1a; 第1章: 计算机与网络安全概念笔记 1. 学习目标 了解保密性、完整性和可用性的关键安全需求。了解OSI的X.800安全架构。识别和举例说明不同的安全威胁和攻击。掌握安全设计的基本准则。熟悉攻击面和攻击树的使用。了解与密码标准相关的…

VulnHub DC-1

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

Springboot项目Eureka安全加密

一、通过security增加账号密码登录 1、registry服务pom增加security依赖 2、registry 配置文件 指定security账号密码 3、http://账号:密码IP:PORT/eureka/ 4、重启 二、关闭节点 三、防火墙移除eureka端口访问 参考&#xff1a;Linux(Centos7)操作记录

制作电子版宣传画册,抢占线上消费市场

随着互联网和移动设备的普及&#xff0c;企业在如今如此激烈的市场竞争中&#xff0c;怎样才能提高自身的宣传力度&#xff0c;进而让企业在市场中占一席之地呢&#xff1f;现在大多数企业都青睐于借助电子画册的形式来实现。 如何制作电子版宣传画册&#xff0c;抢占市场消费资…

02、SpringCloud -- Redis和Cookie过期时间刷新功能

目录 需求:代码流程过滤器类工具类过滤判断远程调用feign接口gitee 配置接口实现过滤器run方法测试:问题:需求: cookie应该写在网关中,网关中可以自定义filter过滤器,用来实现cookie的刷新和redis中key的刷新,延长用户的操作时间。 就是让用户每操作一次,就可以重新刷…

Springboot前后端分离同一套代码在同一台服务器上搭两个测试环境

一、Nginx监听不同端口 1、两个环境不同Service端口指定&#xff0c;可参考 中间件&#xff1a;Nginx工作使用记录&#xff08;反向代理&#xff09; 2、端口允许访问设置&#xff1a; 云服务需配置开通入方向规则 检查服务器防火墙是否开通&#xff0c;并开通端口&#xff0…

大数据学习(18)-任务并行度优化

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

自制照片书的全过程

​ 如今&#xff0c;我们生活在一个信息爆炸的时代&#xff0c;照片已成为我们记录生活、分享情感的重要方式。而亲手制作照片书&#xff0c;不仅能让你感受到制作过程的乐趣&#xff0c;更能为你的回忆注入独特的情感和感受。 但是你知道如何制作照片书吗?小编给大家推荐一款…

华为机试题:HJ7 取近似值

目录 第一章、算法题1.1&#xff09;题目描述1.2&#xff09;第一种解题思路与答案1.3&#xff09;第二种解题思路与答案1.4&#xff09;牛客链接 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、算法…

Qt配置OpenCV教程,亲测已试过

详细版可参考&#xff1a;Qt配置OpenCV教程&#xff0c;亲测已试过&#xff08;详细版&#xff09;_qt opencv_-_Matrix_-的博客-CSDN博客 软件准备&#xff1a;QtOpenCVCMake (QtOpenCV安装不说了&#xff0c;CMake的安装&#xff0c;我用的是&#xff1a;可参考博客&#x…

docker删除集群镜像

今天使用docker安装了集群后&#xff0c;删除镜像失败&#xff0c;如图: 使用docker rmi 镜像Id删除镜像出现错误&#xff1a; Error response from daemon: conflict: unable to delete 41dc8ea0f139 (must be forced) - image is referenced in multiple repos …

故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断 模型描述 利用各种检查和测试方法,发现系统和设备是否存在故障的过程是故障检测;而进一步确定故障所在大致部位的过程是故障定位。故障…

基于花授粉算法的无人机航迹规划

基于花授粉算法的无人机航迹规划 文章目录 基于花授粉算法的无人机航迹规划1.花授粉搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用花授粉算法来优化无人机航迹规划。 1.花授粉…

EASYX剪切区域

eg1:EASY中的颜色模型 可以参考推荐16进制颜色表&#xff1a;https://www.codeeeee.com/color/rgb.html 参考学习EASYX在线文档https://docs.easyx.cn/zh-cn/drawing-func easyx的基本概念和使用方式 #include <stdio.h> #include <easyx.h> #include <iostr…

[Python进阶] 消息框、弹窗:pywin32

6.19 消息框、弹窗&#xff1a;pywin32 说明&#xff1a; pywin32是一个第三方模块库&#xff0c;主要的作用是方便Python开发者快速调用windows API的一个模块库。同时pywin32也是一些windows上第三方Python模块库的前提&#xff0c;例如wmi&#xff0c;如果没有安装pywin32是…

Web APIs——事件流

一、事件流 1.1 事件流与两个阶段说明 事件流指的是事件完整执行过程中的流动路径 说明&#xff1a;假设页面里有个div&#xff0c;当触发事件时&#xff0c;会经历两个阶段&#xff0c;分别是捕获阶段、冒泡阶段 简单来说&#xff1a;捕获阶段是 从父到子 冒泡阶段是从子到父…

故障诊断模型 | Maltab实现GRU门控循环单元故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现GRU门控循环单元故障诊断 模型描述 利用各种检查和测试方法,发现系统和设备是否存在故障的过程是故障检测;而进一步确定故障所在大致部位的过程是故障定位。故障检测和故障定位…

问题 S: 一只小蜜蜂...(初始化dp)

1.注意点&#xff1a; 该题递推公式为斐波那契数列&#xff0c;而n达到50&#xff0c;是非常大的数 &#xff0c; 故应用循环代替递归&#xff0c;同时记录数据 ​​ 2.注意点&#xff1a;初始化起点&#xff0c;切忌重新递归找数 可以直接初始化所求数据&#xff0c;对应之…

不同碳化硅晶体面带来的可能性

对于非立方晶体&#xff0c;它们天生具有各向异性&#xff0c;即不同方向具有不同的性质。以碳化硅晶体面为例&#xff1a; 4H-SIC和6H-SIC的空间群是P63mc&#xff0c;点群是6mm。两者都属于六方晶系&#xff0c;具有各向异性。3C-SIC的空间群是F-43m&#xff0c;点群是-43m。…

关于Lab5用户进程管理内存布局解析

目录 一、解读Lab5的kernel.ld文件 1.获取bin/kernel的symbols table ​2.excel表格数据整理 3.将kernel_symbol_table_1按照B列排序 4.kernel.ld文件内容 5.SECTIONS->. 0xC0100000;解读 6.ENTRY(kern_entry)解读 7.SECTIONS->.text解读 8.SECTIONS->PROVI…