力扣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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY