3 回答

TA贡献1818条经验 获得超7个赞
只是出于好奇,这个递归解决方案会更快吗?
public static void main(String[] args)
{
String input = "1 3 + 2 4 5 - + /";
List<String> terms = new ArrayList<>(Arrays.asList(input.split(" ")));
String result = build(terms);
System.out.println(result);
}
static String build(List<String> terms)
{
String t = terms.remove(terms.size()-1);
if("+-/*".indexOf(t) >= 0)
{
String op2 = build(terms);
String op1 = build(terms);
return "(" + op1 + t + op2 + ")";
}
else return t;
}

TA贡献1786条经验 获得超11个赞
由于使用越来越长的表达式,您的问题是二次复杂性。解决办法是建一棵树。而不是
"(" + k + e + i + ")"
创建一个包含内容e
和子节点的新节点k
以及i
. 然后通过树的简单传递允许您生成任何表示(中缀、前缀或后缀)。
添加回答
举报