《leetcode-go》逆波兰式计算

栈_逆波兰表达式_计算器实现_Golang版本 逆波兰表达式可以讲复杂的计算过程转化为简单的操作过程,进而得出答案。 比如 (a+b)*(b-c) 按照逆波兰表达式的规则得到 :ab+bc-*   将该表达式的字符以及符号,按照从左到右的顺序,依次入栈,一碰到符号则将栈顶前两个元素取出,做运算然后放入栈内,重复该操作,直到表达式结束。 下面将结合栈与逆波兰表达式写一个简易计算器。 运行命令如下 go run counter.go -- 阅读详情

Evaluate the value of an arithmetic expression in Reverse Polish Notation. 

Valid operators are+,-,*,/. Each operand may be an integer or another expression. 

Some examples: 

  ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

在做这个题目之前,我们先了解一下什么是逆波兰式?

我们平常人类常用的计算方式(1+2)*(3+4)-(5*6)是中缀表达式,这种表达式对我们来说很简单,但是对计算机来说却很复杂。

所以转化成计算机喜欢的逆波兰式,上面的例子转化为逆波兰式则为

->"(1+2)*(3+4)","(5*6)","-"

->"(1+2)","(3+4)","*","5","6","*","-"

->"1","2","+","3","4","+","*","5","6","*","-"

这种算式需要采用栈式结构进行计算,先进后出。

package main

import (
	"fmt"
	"strconv"
)

/**
 *
 * @param tokens string字符串一维数组
 * @return int整型
 */
type Stack struct {
	i       int
	numList []int
}

func (stack *Stack) Push(num int) {
	stack.numList = append(stack.numList, num)
	stack.i++
}
func (stack *Stack) Pop() (num int) {
	num = stack.numList[stack.i-1]
	stack.numList = stack.numList[0 : stack.i-1]
	stack.i--
	return
}
func main() {
	var tokens = []string{"2", "1", "+", "3", "*"}
	res := evalRPN(tokens)
	fmt.Println(res)

}
func evalRPN(tokens []string) int {
	// write code here
	stack := new(Stack)
	for _, str := range tokens {
		if str == "+" || str == "-" || str == "*" || str == "/" {
			num1 := stack.Pop()
			num2 := stack.Pop()
			var res int
			switch str {
			case "+":
				res = num2 + num1
				break
			case "-":
				res = num2 - num1
				break
			case "*":
				res = num2 * num1
				break
			case "/":
				res = num2 / num1
				break
			}
			stack.Push(res)
			fmt.Println("ha", stack)
		} else {
			intNum, _ := strconv.Atoi(str)
			stack.Push(intNum)
			fmt.Println("hei", stack)
		}
	}
	return stack.Pop()
}

 

使用微信小程序开发制作一个简单的在线问答应用 以上就是一个简单的在线问答小程序的开发过程。其中包括前端界面的布局和逻辑,后端接口的设计和实现,以及部署和测试的步骤。通过以上步骤,你可以自己尝试开发一个类似的在线问答应用。 阅读详情

相关推荐

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 1537

150. 逆波兰表达式求值

根据逆波兰表示法,求表达式的值。 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 1.整数除法只保留整数部分。 2.给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。 示例 1: 示例 2: 示例 3: 逆波兰表达式: 逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。 1.平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。 2.该算式的逆波兰表达式写法为 ( ( 1

jiangdongxiaobawang的博客 730

PaddleOCR实战:从零开始打造专属OCR模型的完整指南

本文提供了一份从零开始使用PaddleOCR打造专属OCR模型的完整实战指南。内容涵盖环境搭建、数据标注与准备、模型训练与调优,以及最终的模型转换与部署。重点介绍了如何利用PaddleOCR进行模型训练,并整合PPOCRLabel等工具高效准备数据集,帮助开发者快速构建适用于特定场景的高精度OCR识别能力。

rl6adventurer的博客 733

算法详解——leetcode150(逆波兰表达式)

欢迎来看博主的算法讲解博主ID:代码小豪。

2301_77239666的博客 1565

使用这个算法我可以实现英雄联盟里英雄的走位|Java 开发实战

A算法,A(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。 基本概念 首先在大学我们遇到最多的算法Dijkstra、Floyd、广度搜索、深度搜索。关于这些算法我们以后再慢慢的研究,今天的重点在A算法上。A算法是一种启发式算法。与上述几种算法不同的是A*算法在考虑起始节点的同时还会考虑到目标节点的代价。 在A*算法中我们给每个节点都定义一些属性。最基本的就是下文提到的三基数-这里的三基数是我自己定义.

Java进阶营 312

【深度解析】信息素养提升实践活动(附:历年获奖作品分析)

全国师生信息素养提升实践活动是由教育部教育技术与资源发展中心(中央电化教育馆)主办,面向全国师生的一项信息化交流展示活动。

m0_74417957的博客 2628

golang实现中缀表达式转换成后缀表达式(逆波兰)

NifixToRPN函数只能转换无括号的中缀表达式,遇到括号则调用barket函数,如果括号中嵌套括号则形成了递归。

weixin_42474185的博客 869

开源3D激光SLAM算法的异同点、优劣势与适配场景总结

本文对比分析了主流开源3D激光SLAM方案的核心差异与适用场景。LOAM架构简洁但精度较低;LeGO-LOAM轻量化适合地面机器人;LIO-SAM采用因子图优化支持多传感器融合;LVI-SAM通过视觉-激光-惯性三重冗余提升鲁棒性;FAST-LIO系列基于滤波架构实现超高实时性。选型需权衡传感器配置(纯激光/激光+IMU/激光+视觉)、运动状态(高速/常规)、计算资源等因素:资源受限选LeGO-LOAM或Faster-LIO,高速运动选FAST-LIO系列,退化环境选LVI-SAM,全局一致性需求选LIO-

Studying…… 651

Leetcode第150题—逆波兰表达式

leetcode,栈,算法

Green_756的博客 1204

Google Earth Engine(GEE)——将sentinel - 2影像所有波段重采样到10m分辨率 (resample 和 projection的使用)

影像重投影是将一个影像从一个坐标系投影到另一个坐标系的过程。这通常涉及到将像素从一个平面坐标系变换到另一个平面坐标系。这可以用于许多应用中,例如建立数字高程模型(DEM)和地图制图。影像重投影通常需要进行数学计算,包括转换矩阵和插值算法,以确保像素值的准确性和精度。这次我们将对哨兵2好数据中20m分辨率的波段,重采样到10m分辨率中,然后同一参与计算。

此星光明博客 3108

QPrintPreviewDialog 打印预览使用实例

qt打印机预览实用demo

啊渊的专栏 3677

Golang对逆波兰表示法的简单实现

1 package main 2 import ( 3 "bufio" 4 "fmt" 5 "os" 6 "strconv" 7 ) 8 type Stack struct { 9 i int 10 data [10]int 11 } 12 func (s *Stack) Push(a int) { 13...

weixin_30795127的博客 206

Python爬虫实战 | 拼多多商品评论采集与深度分析

本文从 API 调用、网页渲染到情感分析与关键词提取,全流程剖析了“拼多多商品评论采集与分析”项目。Scrapy + API 可快速抓取评论;Playwright 可突破 API 限制,抓取完整页面内容;数据清洗 + 分析揭示用户真实反馈;可持续部署、扩展至更多商品 & 时间段;

2201_76125261的博客 1696

面试算法常考题之-------逆波兰式合集

从前中后序的结构其实不难得出一个很明显的结论:前缀式往往会将运算符号放在前面,数字放在后面,而后缀式往往是将数字放在前面,运算符号放在后面。

qq_51898139的博客 617

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

leetcode | go | 第224题 | 基本计算器

基本计算器

iCling的博客 280

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【GoLang】命令行计算器(栈,逆波兰表达式)

输入一个式子(中缀表达式),将其传入并转换为后缀表达式,接着通过计算后缀表达式来获得结果。

2201_75692232的博客 777

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

go逆波兰式计算器

编写一个简单的逆波兰式计算器,它接受用户输入的整型数(最大值 999999)和运算符 +、-、*、/。 输入的格式为:number1 ENTER number2 ENTER operator ENTER --> 显示结果 package main import ( "bufio" "errors" "fmt" "os" "strconv" "strings" )

ysj的博客 499

逆波兰式(后缀式)详解

1、建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。 (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,

tianmo2010的专栏 5916

栈的应用 - 波兰式与逆波兰式

上一篇笔记中,简单讲到了栈的特性,并且给出了栈的实现,现在要利用栈来实现表达式的求值问题。   有三个名词与表达式的计算密切相关,分别是中缀表达式、前缀表达式和后缀表达式,它们都是表达式的一种记法,区别是运算符相对于操作数的位置不同:前缀表达式的操作符位于与其相关的操作数之前;中缀表达式的操作符位于与其相关的操作数之间;后缀表达式的操作符位于与其相关的操作数之后。(简而言之,前、中、后就是指操作符所

u011836061的专栏 7505

中缀表达式 转 后缀表达式(逆波兰表达式) 及计算

中缀表达式转换后缀表达式: 正常表达式(中缀表达式)3+4*5-6 对应的后缀表达式(逆波兰表达式):3 4 + 5 × 6 - 【利用栈的方法 】 中缀表达式看成一个字符串,从左到右开始扫描中缀表达式: 遇到操作数:直接输出(添加到后缀表达式中) 栈为空时,遇到运算符,直接入栈 遇到左括号:将其入栈 遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,括号不...

推土机 2101

LeetCode-150-逆波兰表达式

根据 逆波兰表示法,求表达式的值。 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。 示例 1: 输入: [“2”, “1”, “+”, “3”, “*”] 输出: 9 解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9 示例 2: 输入:

qq_43269370的博客 186

LeetCode 每日一题 逆波兰式(后缀表达式)

这题真的历经波澜,题目本身不难,主要在于各种各样的格式错误和修改,比如字符串转换为Int,比如栈的取出栈顶元素,删除栈顶,入栈等操作 class Solution { public: int evalRPN(vector<string> &tokens) { //这个是关于栈的后缀表达式 //首先需要创建一个栈,大致思路就是...

wzw的博客 388

leetcode_2:Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid ope

题目; Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are+,-,*,/. Each operand may be an integer or another expression. Some examples: ["2", "1",...

王文强的博客 483

leetcode——计算逆波兰式(后缀表达式)的值

题干:运算符仅包含"+","-","*“和”/",被操作数可能是整数或其他表达式 例如: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6 解: class Solution: def evalRPN(self , tokens ): # write code here stack = []

xy_的博客 294

将表达式转换为逆波兰表达式-LintCode

给定一个表达式字符串数组,返回该表达式的逆波兰表达式(即去掉括号)。示例: 对于 [3 - 4 + 5]的表达式(该表达式可表示为[“3”, “-“, “4”, “+”, “5”]),返回 [3 4 - 5 +](该表达式可表示为 [“3”, “4”, “-“, “5”, “+”])。思想: 对于数字时,加入后缀表达式; 对于运算符: a. 若为 ‘(‘,入栈; b. 若为 ‘)’,则依次

kane的博客 3800

Leetcode 计算逆波兰式(后缀表达式)的值

题目描述 计算逆波兰式(后缀表达式)的值 运算符仅包含"+","-","*"和"/",被操作数可能是整数或其他表达式 例如: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9↵ ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6 Evaluate the valu...

不一样的烟火 711
上一篇: 《leetCode-go》二叉树的最小深度
下一篇: 《leetcode-go》一条直线上的最多点数
less_cold
博客等级 码龄10年 40粉丝 364原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值