首页 > 其他分享 >力扣150 逆波兰表达式求值

力扣150 逆波兰表达式求值

时间:2023-01-01 23:13:12浏览次数:59  
标签:tokens 150 算术 整数 力扣 波兰 求值 表达式

题目:

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。
请你计算该表达式。返回一个表示表达式值的整数。
注意:
    有效的算符为 '+'、'-'、'*' 和 '/' 。
    每个操作数(运算对象)都可以是一个整数或者另一个表达式。
    两个整数之间的乘法总是 向零截断 。
    表达式中不含除零运算。
    输入是一个根据逆波兰表示法表示的算术表达式。
    答案及所有中间计算结果可以用 32 位 整数表示。

示例:

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

思路:

 和《删除字符串中的所有相邻重复项》一题相似

遍历string数组,遇到数字压入栈中,遇到符号,则弹出两个元素进行运算。

需要注意的是,减法和除法要确认数字的位置顺序。

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> st=new Stack<>();
        for(int i=0;i<tokens.length;i++){
            if(tokens[i].equals("+")){// leetcode 内置jdk的问题,不能使用==判断字符串是否相等
                int a=st.pop();
                int b=st.pop();
                st.push(a+b);//将一个计算结果压入栈
            }else if(tokens[i].equals("-")){//-和/要注意计算顺序
                int a=st.pop();
                int b=st.pop();
                st.push(b-a);
            }else if(tokens[i].equals("*")){
                int a=st.pop();
                int b=st.pop();
                st.push(a*b);
            }else if(tokens[i].equals("/")){
                int a=st.pop();
                int b=st.pop();
                st.push(b/a);
            }else{
                st.push(Integer.valueOf(tokens[i]));
            }
        }
        return st.pop(); //弹出最终计算结果
    }
}

 

标签:tokens,150,算术,整数,力扣,波兰,求值,表达式
From: https://www.cnblogs.com/cjhtxdy/p/17019209.html

相关文章

  • 力扣100 相同的树
    力扣100相同的树题目:给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:......
  • 力扣1047 删除字符串中的所有相邻重复项
    题目:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操......
  • 好题分享、心路历程(力扣601)——连续登录
    【题目介绍】该题为力扣601,名为体育馆的人流量。【题型分类】属于连续专题。官网标为困难题。【思路分享】这里的连续类似时间连续,采用row_number()技巧解题。关......
  • 好题分享、心路历程(力扣2173)——连续登录
    【题目介绍】该题为力扣2173,名为最多连胜的次数。【题型分类】属于连续专题。官网标为困难题。【思路分享】这里的连续不属于时间连续,属于事件连续,采用两次row_numb......
  • 好题分享、心路历程(力扣1225)
    【题目介绍】该题为力扣1225,名为报告系统状态的连续日期。【题型分类】属于连续专题。官网标为困难题。【思路分享】这里的连续属于时间连续,采用row_number()、subd......
  • 力扣---1262. 可被三整除的最大和
    给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。示例1:输入:nums=[3,6,5,1,8]输出:18解释:选出数字3,6,1和8,它们的和是18(可被3整除的最大和)。示例2......
  • 力扣每日一题2023.1.1---2351. 第一个出现两次的字母
    给你一个由小写英文字母组成的字符串s,请你找出并返回第一个出现两次的字母。注意:   如果a的第二次出现比b的第二次出现在字符串中的位置更靠前,则认为字母......
  • 力扣每日一题2022.12.31---2037. 使每位学生都有座位的最少移动次数
    一个房间里有n 个座位和n 名学生,房间用一个数轴表示。给你一个长度为n 的数组 seats ,其中 seats[i]是第i 个座位的位置。同时给你一个长度为n 的数组 stude......
  • 150. 逆波兰表达式求值
    150.逆波兰表达式求值难度中等650收藏分享切换为英文接收动态反馈给你一个字符串数组tokens,表示一个根据逆波兰表示法表示的算术表达式。请你计算该表达式。返回一......
  • 力扣搜索插入位置
    目录题目解题思路代码本篇扯淡题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用......