【JAVA】【leetcode】【使用堆栈实现后向计算】

题目:evaluate-reverse-polish-notation

要求:

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

理解:

后向计算,如(2,1+3*),实为(2+1)*3;使用堆栈实现的原理就是push(2)进栈,push(1)进栈,当遇到符号“+”时,a = pop(),再b = pop(),实现b+a,

然后将(b+a)的和再push进栈,等到下一个符号的到来时再pop出栈参与计算,直到计算完输入的所有字符。

import java.util.*;
public class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<Integer>();
        for(int i=0;i<tokens.length;i++){
            try{
                int num = Integer.parseInt(tokens[i]);
                stack.push(num);
            }catch(Exception e){
                int a = stack.pop();
                int b = stack.pop();
                stack.push(operate(b,a,tokens[i]));
            }
        }
        return stack.pop();
    }
        public int operate(int a,int b,String token){
            switch(token){
                case"+": return a+b;
                case"-": return a-b;
                case"*": return a*b;
                case"/":
                if(b==0)
                    return 0;
                else
                    return a/b;
                default:return 0;
            }
        }

}
				
时间: 2024-12-22 21:10:51

【JAVA】【leetcode】【使用堆栈实现后向计算】的相关文章

java用double和float进行小数计算精度不准确

java用double和float进行小数计算精度不准确 大多数情况下,使用double和float计算的结果是准确的,但是在一些精度要求很高的系统中或者已知的小数计算得到的结果会不准确,这种问题是非常严重的. <Effective Java>中提到一个原则,那就是float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal,通过使用BigDecimal类可以解决上述问题,java的设计者给编程人员提供了一个很有用的类BigDecim

java 继承之间方法的时候(计算出经理与员工之间公司差别)

自己检讨下:刚开始看这个的时候,我觉得挺简单的,但是让我自己写的时候我确实不会写,最大的缺点就是好高骛远,偷懒,基础不会就想着上天. 希望别的朋友别要有这样的想法,再简单的例子,如果你不亲自敲下,在揣摩下,你敢说日后让你写这样的代码,你能写出来吗,我不是天才,但我坚信勤奋可以造就天才. 首先:分析下员工与经理之间的相同点,就是员工与经理都有姓名,工资和日期(其实我感觉这个日期不必要有)这个三个属性,经理比员工多的就是经理又项目奖金 然后可以把相同的信息抽出来,实例一个Employee类 ,这个类

Java [Leetcode 119]Pascal&#39;s Triangle II

题目描述: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. 解题思路: 每次在上一个list前面插入1,然后后面的每两个间相加赋值给前一个数. 代码描述: public class Solution { public List<Integer> getRow(int rowIndex) { List<Integer> r

Java 正则表达式 向前、向后匹配

//向后匹配 String a = "I paid $90 for 10 oranges, 12 pears and 8 apples. I saved $5 on "; Pattern p = Pattern.compile("(?<=\\$)\\d+"); Matcher m = p.matcher(a); while (m.find ()) { String group = m.group (); System.out.println (group);

1,由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。

ylbtech-Error-WebForm: 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值. {由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值.} 1.A,错误代码返回顶部 Tip:{由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值.} 1.B,出错原因分析返回顶部 1.C,相关解决方法返回顶部 作者:ylbtech出处:http://ylbtech.cnblogs.com/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此

java 后台 Excel 文件生成后转化为字节流

Java 后台 Excel 文件生成后转化为字节流 java excel 使用 poi组件, HSSFWorkbook workBook = new HSSFWorkbook(); 对于workBook生成字节流,很容易发现有个workBook .getBytes(),但是,是不可用的,下载以后打不开, 如果下载,正确的写法为 workBook.write(response.getOutputStream()); 如果转化为字节流: ByteArrayOutputStream os = new

【Java】移动JDK路径后,修改环境变量不生效 Error: could not open `C:\Program Files\Java\jre1.8.0_131\lib\amd64\jvm.cfg&#39;

场景: JDK原先装在C盘的,现在移动到了D盘,并在环境变量修改了%JAVA_HOME%的新路径,但是CMD中输入java后依然报错. Error: could not open `C:\Program Files\Java\jre1.8.0_131\lib\amd64\jvm.cfg' 解决办法: 在环境变量PATH中把下面这段挪到PATH最前面即可.记得要关闭再打开CMD后再输入java检查. %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 再不行的话也许可以试试这

(Java) LeetCode 25. Reverse Nodes in k-Group —— k个一组翻转链表

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in

构建一个学生Student,根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

定义一个表示学生信息的类Student,要求如下: (1)类Student的成员变量: sNO 表示学号: sName表示姓名: sSex表示性别: sAge表示年龄: sJava:表示Java课程成绩. (2)类Student带参数的构造方法: 在构造方法中通过形参完成对成员变量的赋值操作. (3)类Student的方法成员: getNo():获得学号: getName():获得姓名: getSex():获得性别: getAge()获得年龄: getJava():获得Java 课程成绩 根据类