我认为没有必要建造一棵树,您应该能够随心所欲地进行计算-您只需要稍微延迟加法和减法即可正确考虑优先级:
static void check(double sum, double prevIoUs, String digits, double target, String expr) {
if (digits.length() == 0) {
if (sum + prevIoUs == target) {
System.out.println(expr + " = " + target);
}
} else {
for (int i = 1; i <= digits.length(); i++) {
double current = Double.parseDouble(digits.substring(0, i));
String remaining = digits.substring(i);
check(sum + prevIoUs, current, remaining, target, expr + " + " + current);
check(sum, prevIoUs * current, remaining, target, expr + " * " + current);
check(sum, prevIoUs / current, remaining, target, expr + " / " + current);
check(sum + prevIoUs, -current, remaining, target, expr + " - " + current);
}
}
}
static void f(String digits, double target) {
for (int i = 1; i <= digits.length(); i++) {
String current = digits.substring(0, i);
check(0, Double.parseDouble(current), digits.substring(i), target, current);
}
}