力扣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(); //弹出最终计算结果
    }
}
复制代码

 

java各类遍历总结:

复制代码
//1.字符串
for(int i=0;i<str.length();i++){
      System.out.println(str.chatAt(i));  
}

char[] ch=str.toCharArray();
for(int i=0;i<ch.length();i++){
      System.out.println(ch[i]);
}

//2.String[]
String[] str=new String[3];
for (int i=0; i<str.length; i++) {
      System.out.println(str[i]);
}

//3.二维数组
int Arr[][]={{5,7,15},{8,4,11},{3,6,13}};
for (int i = 0; i < Arr.length; i++) {
     for (int j = 0; j < Arr[i].length; j++) {
         System.out.print(Arr[i][j]+" ");
     }
}

//4.集合
for(int i=0;i<arrayList.size();i++){
     System.out.println(arrayList.get(i));  
}

//5.Map
Iterator<Map.Entry<Integer,String>> iterator=map.entrySet().iterator();
while(iterator.hasNext()){
     Map.Entry<Integer,String> entry=iterator1.next();
     System.out.println(entry.getKey());
     System.out.println(entry.getValue());
}
复制代码

其他常见遍历方式总结:

复制代码
    public class 四种遍历方法 {
        public static void main(String[] args){
            List<String> list=new ArrayList<>();
            list.add("Java");
            list.add("html");
            list.add("xml");
            list.add("mysql");
            for(int i=0;i<list.size();i++){//for循环遍历
                String ele=list.get(i);
                System.out.println(ele);
            }
            System.out.println("--------------------------");
            Iterator<String> it=list.iterator();//迭代器遍历
            while(it.hasNext()){//判断该处是否为空
                String ele=it.next();//遍历完该元素后,自然跳到下一个元素处
                System.out.println(ele);
            }
            System.out.println("--------------------------");
            for(String ele:list){//增强for循环遍历
                System.out.println(ele);
            }
            System.out.println("--------------------------");
            list.forEach(s->{//JDK1.8之后的lambda表达式
                System.out.println(s);
            });
        }
    }
   
本段原文链接:https://blog.csdn.net/weixin_61957289/article/details/124217778
复制代码

 

posted @   壹索007  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示