Java от цикла к рекурсии в поиске комбинации - PullRequest
0 голосов
/ 02 октября 2011

как я могу изменить это для цикла на рекурсивный, если в случае groupSize = 3, n = 6 выведет 123 124 125 126 134 135 136 145 146 156 234 235 236 245 246 345 346 356 456

public static void printCombinations(int groupSize, int n){

    if (groupSize <=n && groupSize>0 && n>0){

            for (int i=1; i<=n; i++){
                for (int j=1; j<=i-1; j++){
                    for (int k=1; k<=j-1; k++){
                        int first = k;
                        int second = j;
                        int third = i;
                        if (i!=j && i!=k && j!=k){
                            System.out.println(first +" " + second +" "+ third);
                            }
                    }
                }   
            }
        }
    }

Ответы [ 2 ]

1 голос
/ 02 октября 2011

Вероятно, будет грубо по краям;Я только изучаю Java.

class comboMaker {
    public static void main(String args[]){
        String[] test1 = startCombo(3,6);
        prnt(test1);
    }
    private static String[] startCombo(int len,int digits){
        return combos(len,digits,"",0);
    }
    private static String[] combos(int len,int digits,String cur,int lastdig){
        if (len>digits){
            return null;
        }
        if (cur.length()==len){
            return new String[]{cur};           
        }
        String tmp = cur;
        String[] rtn = {};
        for(int i = lastdig+1;i<=digits;i++){
            tmp=cur+Integer.toString(i);
            rtn=concat(rtn,combos(len,digits,tmp,i));   
        }
        return rtn;

    }
    private static String[] concat(String[] A, String[] B) {
           String[] C= new String[A.length+B.length];
           System.arraycopy(A, 0, C, 0, A.length);
           System.arraycopy(B, 0, C, A.length, B.length);
           return C;
    }

    private static void prnt(String[] str){
        if(str==null){
            System.out.println("Invalid string array");
            return;
        }
        for(int i =0;i<str.length;i++ ){
            System.out.println(str[i]);
        }   
    }   
}

Я включил метод конкатенации массивов, который нашел здесь: Как объединить два массива в Java?

Такжеметод для печати вашего строкового массива, созданного с помощью Combo Maker.

0 голосов
/ 02 октября 2011

Создайте метод, который будет производить суффикс для конкретного значения с x цифрами и возвращать список всех возможных суффиксов.Может быть что-то вроде:

List<String> generateSuffixes(int prefix, int suffixSize, int maxDigitValue);

Метод будет повторяться от prefix + 1 до maxDigitValue.Затем он вызвал бы себя со значением итерации и suffixSize - 1.Это добавит итерацию к каждому сгенерированному суффиксу, чтобы создать список для возврата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...