You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java递归实现Prefix前缀表达式转Postfix后缀表达式异常排查

前缀表达式递归转后缀表达式问题修复

核心问题排查

  • 递归终止逻辑错误:当前代码遇到长度为1的子串时返回null,没有正确返回操作数字符,同时缺少操作数的直接返回分支
  • 子串重复处理:两次递归调用都传入了完整的剩余字符串,没有记录左操作数处理后消耗的字符长度,导致右操作数从子串开头重复处理,输出大量重复字符
  • 拼接规则错误:后缀表达式的拼接规则应为左操作数后缀 + 右操作数后缀 + 当前运算符,现有代码错误拼接了剩余全部字符串

修正后实现代码

public static boolean operator(char o) {
    return o == '+' || o == '-' || o == '*' || o == '/' || o == '$';
}

// 入口方法
public static String preToPost(String s) {
    // 用长度为1的int数组传递下标,解决Java值传递无法修改基础类型的问题
    return preToPostHelper(s, new int[]{0});
}

// 递归辅助方法
private static String preToPostHelper(String s, int[] curIndex) {
    char currentChar = s.charAt(curIndex[0]);
    curIndex[0]++; // 下标后移,标记当前字符已处理
    
    // 操作数直接返回
    if (!operator(currentChar)) {
        return String.valueOf(currentChar);
    }
    
    // 运算符先递归取左右操作数的后缀形式
    String leftPost = preToPostHelper(s, curIndex);
    String rightPost = preToPostHelper(s, curIndex);
    
    // 按后缀规则拼接返回
    return leftPost + rightPost + currentChar;
}

验证说明

输入示例-+ABC调用preToPost方法,返回结果为AB+C-,完全符合预期。

内容的提问来源于stack exchange,提问作者Douglas Feeney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:06:03