Java 我如何修改这个递归回溯算法(倒计时:游戏)来找到所有的解决方案而不是一个?

Java 我如何修改这个递归回溯算法(倒计时:游戏)来找到所有的解决方案而不是一个?,java,recursion,backtracking,Java,Recursion,Backtracking,我写了一个方法,使用递归和回溯来找到倒计时问题的一个解决方案。我现在想做的是修改这个方法,以便它能够找到所有可能的解决方案。 该程序包括使用基本算术运算(+、-、×、÷)从6个数字的初始集合中获取目标数字(101到999之间的自然整数)。 我能够找到第一个解决方案,但我希望找到所有解决方案,然后选择最好的解决方案(操作较少的解决方案)。 这是我现在掌握的密码 private static boolean backtracking(ArrayList<Integer> aux, int

我写了一个方法,使用递归和回溯来找到倒计时问题的一个解决方案。我现在想做的是修改这个方法,以便它能够找到所有可能的解决方案。 该程序包括使用基本算术运算(+、-、×、÷)从6个数字的初始集合中获取目标数字(101到999之间的自然整数)。 我能够找到第一个解决方案,但我希望找到所有解决方案,然后选择最好的解决方案(操作较少的解决方案)。 这是我现在掌握的密码

private static boolean backtracking(ArrayList<Integer> aux, int len, int total, ArrayList<String> operations) {
    
    for(int i = 0; i < len; i++) {
        
        if(aux.get(i) == total) {
            return true;
        }
        
        for(int j = i + 1; j < len; j++) {
            for(int k = 0; k < operations.size(); k++) {
                
                int res =  doOperation(operations.get(k), aux.get(i), aux.get(j));
                
                if(res != 0) {
                    
                    int savei = aux.get(i);
                    int savej = aux.get(j);
                    aux.set(i, res);
                    aux.set(j, aux.get(len-1));
                    
                    if(backtracking(aux, len-1, total, operations)) {
                        solution.add(Math.max(savei, savej) + " " + operations.get(k) + " " + Math.min(savei, savej) + " = " + res);
                        return true;
                    }
                    
                    aux.set(i, savei);
                    aux.set(j, savej);
                    
                }
                
            }
            
        }
        
    }
    
    return false;
    
}

private static int doOperation(String operation, int x, int y) {
    
    int r = 0;
    
    if(operation.equals("+")) {
        
        r = x + y;
        
        if(r <= x || r <= y) {
            return 0;
        }else {
            return r;
        }
        
    }else if(operation.equals("-")) {
        
        if(x < y) {
            return y - x;
        }else {
            return x - y;
        }
        
    }else if(operation.equals("*")) {
        
        r = x * y;
        
        if(r <= x || r <= y) {
            return 0;
        }else {
            return r;
        }
        
    }else if(operation.equals("/")) {
        
        if(x < y) {
            int t = x;
            x = y;
            y = t;
        }
        
        if(x % y == 0) {
            return x / y;
        }else {
            return 0;
        }
        
    }else {
        return r;
    }
    
}
private静态布尔回溯(ArrayList aux、int len、int total、ArrayList操作){
对于(int i=0;i