牛客NC216 逆波兰表达式求值【中等 栈 C++/Java/Go/PHP】

2024-04-24 20:52

本文主要是介绍牛客NC216 逆波兰表达式求值【中等 栈 C++/Java/Go/PHP】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

在这里插入图片描述
题目链接:https://www.nowcoder.com/practice/885c1db3e39040cbae5cdf59fb0e9382

核心

参考答案C++

class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param tokens string字符串vector* @return int整型*/int evalRPN(vector<string>& tokens) {//栈。vector模拟vector<int> stack(tokens.size());int idx = 0;for(int i=0;i< tokens.size();i++){string s = tokens[i];if(s=="+" || s=="-" || s== "*" || s=="/"){int num1 = stack[idx-1];int num2 = stack[idx-2];int cur = 0;if(s=="+"){cur = num2+num1;}if(s=="-"){cur = num2-num1;}if(s=="*"){cur = num2*num1;}if(s=="/"){cur = num2/num1;}stack[idx-2] = cur;idx-=1;}else{stack[idx++] = std::stoi(s);}}return stack[idx-1];}
};

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param tokens string字符串一维数组* @return int整型*/public int evalRPN (String[] tokens) {//栈List<String> strings = Arrays.asList("+", "-", "*", "/");Stack<Integer> stack = new Stack<>();for (String s : tokens) {if (strings.contains(s)) {compute(stack, s);} else {stack.add(Integer.valueOf(s));}}return stack.pop();}public void compute(Stack<Integer> stack, String op) {int num1 = stack.pop();int num2 = stack.pop();int ans = 0;if (op.equals("+"))ans = num2 + num1;if (op.equals("-"))ans = num2 - num1;if (op.equals("*"))ans = num2 * num1;if (op.equals("/"))ans = num2 / num1;stack.add(ans);}
}

参考答案Go

package mainimport "strconv"/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param tokens string字符串一维数组* @return int整型*/
func evalRPN(tokens []string) int {//栈。本答案数组模拟栈stack := make([]int, len(tokens))idx := 0for i := 0; i < len(tokens); i++ {s := tokens[i]if s == "+" || s == "-" || s == "*" || s == "/" {//每次从栈中取出栈顶的2个数,计算结果后存进栈中num1 := stack[idx-1]num2 := stack[idx-2]cur := 0if s == "+" {cur = num2 + num1}if s == "-" {cur = num2 - num1}if s == "*" {cur = num2 * num1}if s == "/" {cur = num2 / num1}idx -= 2stack[idx] = curidx += 1} else {num, _ := strconv.Atoi(s)stack[idx] = numidx++//fmt.Println(stack)}}return stack[idx-1]
}

参考答案PHP

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param tokens string字符串一维数组 * @return int整型*/
function evalRPN( $tokens )
{// PHP中数组也是栈。本答案用数组模拟栈$stack =[];$idx = 0;for($i=0;$i<count($tokens);$i++){$s= $tokens[$i];if($s =='+' || $s == '-' || $s =='*' || $s =='/'){//取出栈顶2个数计算结果后存入栈中$num1 = $stack[$idx-1];$num2 = $stack[$idx-2];$cur = 0;if($s =='+') {$cur = $num2+$num1;}if($s =='-') {$cur = $num2-$num1;}if($s =='*') {$cur = $num2*$num1;}if($s =='/') {$cur =intval( $num2/$num1);}$stack[$idx-2] = $cur;$idx-=1;}else{$stack[$idx++] = $s;}}return $stack[$idx-1];
}

这篇关于牛客NC216 逆波兰表达式求值【中等 栈 C++/Java/Go/PHP】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/932823

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

Python19 lambda表达式

在 Python 中,lambda 表达式是一个小型匿名函数,通常用于实现简单、单行的函数。lambda 函数可以接受任意数量的参数,但只能有一个表达式。 基本语法: lambda arguments: expression 这里,arguments 是传递给 lambda 的参数,expression 是关于这些参数的表达式,它的计算结果就是 lambda 函数的返回值。 使用

C++的模板(八):子系统

平常所见的大部分模板代码,模板所传的参数类型,到了模板里面,或实例化为对象,或嵌入模板内部结构中,或在模板内又派生了子类。不管怎样,最终他们在模板内,直接或间接,都实例化成对象了。 但这不是唯一的用法。试想一下。如果在模板内限制调用参数类型的构造函数会发生什么?参数类的对象在模板内无法构造。他们只能从模板的成员函数传入。模板不保存这些对象或者只保存他们的指针。因为构造函数被分离,这些指针在模板外

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

C/C++的编译和链接过程

目录 从源文件生成可执行文件(书中第2章) 1.Preprocessing预处理——预处理器cpp 2.Compilation编译——编译器cll ps:vs中优化选项设置 3.Assembly汇编——汇编器as ps:vs中汇编输出文件设置 4.Linking链接——链接器ld 符号 模块,库 链接过程——链接器 链接过程 1.简单链接的例子 2.链接过程 3.地址和