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

题目

题目链接:https://www.nowcoder.com/practice/885c1db3e39040cbae5cdf59fb0e9382

核心

参考答案C++

cpp 复制代码
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

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

go 复制代码
package main

import "strconv"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param tokens string字符串一维数组
 * @return int整型
 */
func evalRPN(tokens []string) int {
	//栈。本答案数组模拟栈
	stack := make([]int, len(tokens))
	idx := 0
	for i := 0; i < len(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 = num2 / num1
			}
			idx -= 2
			stack[idx] = cur
			idx += 1
		} else {
			num, _ := strconv.Atoi(s)
			stack[idx] = num
			idx++
			//fmt.Println(stack)
		}
	}

	return stack[idx-1]
}

参考答案PHP

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];
}
相关推荐
森焱森28 分钟前
APM与ChibiOS系统
c语言·单片机·算法·架构·无人机
★Orange★38 分钟前
Linux Kernel kfifo 实现和巧妙设计
linux·运维·算法
尘世闲鱼42 分钟前
解数独(C++版本)
开发语言·c++·算法·解数独
qqxhb1 小时前
零基础数据结构与算法——第四章:基础算法-排序(中)
数据结构·算法·排序算法·归并·快排·堆排
Y1nhl2 小时前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
qq_401700412 小时前
C语言中位运算以及获取低8位和高8位、高低位合并
c语言·开发语言·算法
CoovallyAIHub2 小时前
YOLO模型优化全攻略:从“准”到“快”,全靠这些招!
深度学习·算法·计算机视觉
闻缺陷则喜何志丹3 小时前
【BFS】 P10864 [HBCPC2024] Genshin Impact Startup Forbidden II|普及+
c++·算法·宽度优先·洛谷
MicroTech20253 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
今天背单词了吗9803 小时前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题