波兰表示法和逆波兰表示法的转换

笔试题算法实现

最近有很多笔试算法题,碰到了一道很陌生的:波兰表示法和逆波兰表示法的转换,用java代码实现了一下,题解给的实例跑通了,不知道其他的怎么样。
题干如下:题干描述

思路

  • 从后向前遍历输入的字符数组
  • 根据题干中前波的表示方法入栈
  • 输出前波的结果,与给出示例表达式对比
  • *将正确的前波拆分入栈
  • 规则为遇到右括号出栈四项值,分别为:左括号,表达式左值,表达式,表达式右值
  • 按后波的规则拼接,并入栈
  • 最后栈中的就是结果

java代码如下

####  **写的仓促变量定义有点乱**
import java.util.ArrayList;
import java.util.Stack;


public class Main {
    public static void main(String[] args) {
        String str="-,+,a,*,+,b,c,d,e";
        String[] strs=str.split(",");
        Stack<String> stac=new Stack<String>();
        
        ArrayList<String> al=new ArrayList<String>();
        al.add("+");al.add("-");al.add("*");al.add("/");// 存放标点值
        
        int i=strs.length-1;
        while(i>=0){
            
            if(!al.contains(strs[i])){
                stac.push(strs[i]);
            }else{
                    String one=stac.pop();
                    String two=stac.pop();
                    String tem="("+one+strs[i]+two+")"; // 全部添加括号保证 下边运算的正确顺序
                    stac.push(tem);
            }
            i--;
        }
        
        Stack<String> sta1=new Stack<String>();
        String[] re=stac.pop().split("");
        int j=0;
        while(j<re.length){
            if(!re[j].equals(")")){
                sta1.push(re[j]);
            }else{
                String one=sta1.pop();
                String two=sta1.pop();
                String three=sta1.pop();
                String four=sta1.pop();//  仅仅是将左括号 去除掉
                String tem=""+three+one+two;
                sta1.push(tem);
            }
            j++;
        }
        System.out.println(sta1.pop());
    }
}
可直接运行,通过题解中示例,不知道其他的对不对

另外,由于代码中输入已写死,所以没有考虑边界不符合情况

可顶可踩可留言!

转载于:https://www.cnblogs.com/CHWYH/p/5845689.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值