java从for循环到递归寻找组合

发布于 2024-12-07 17:44:34 字数 803 浏览 0 评论 0原文

如果 if groupSize=3, n=6 将打印,我如何将此 for 循环更改为递归 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);
                            }
                    }
                }   
            }
        }
    }

how can i change this for loop to recursive in the event that if groupSize=3, n=6 will print
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);
                            }
                    }
                }   
            }
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一口甜 2024-12-14 17:44:34

可能边缘会比较粗糙;我刚刚学习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]);
        }   
    }   
}

我在这里找到了一种连接数组的方法: How can I concatenate 两个数组在 Java 中?

也是一种打印组合生成器生成的字符串数组的方法。

Probably going to be rough around the edges; I'm just learning 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]);
        }   
    }   
}

I included a method to concatenate arrays that I found here: How can I concatenate two arrays in Java?

Also a method to print your string array generated with the combo maker.

辞别 2024-12-14 17:44:34

创建一个方法,该方法将生成具有 x 位数字的特定值的后缀,并返回所有可能后缀的列表。可能类似于:

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

该方法将从 prefix + 1 迭代到 maxDigitValue。然后它会使用迭代值和 suffixSize - 1 来调用自身。它将迭代附加到生成的每个后缀以创建要返回的列表。

Create a method that will produce the suffix to a particular value with x digits and return a list of all possible suffixes. Might be something like:

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

The method would iterate from prefix + 1 to maxDigitValue. It would then call itself with the iterate value and suffixSize - 1. It would append the iterate to each suffix generated to create the list to return.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文