首页 > 解决方案 > 如何从 for 循环关系中建立循环关系

问题描述

那是我的第一篇文章,而且我对 Java 还是很陌生,并且正在尝试制作一个小程序,该程序将给出所有具有从 0 到给定数字的数字的唯一数字。因此,例如对于 input: 4 输出将是:

    1234
    1243
    1324
    1342
    1423
    ....

依此类推,4 也意味着输出将在 1000 < x < 10000 的范围内,其中 x 是输出。

我试图制作如此循环的关系方法,但找不到任何有用的东西。因此,我创建了一个 for 循环关系,它可以提供我想要的,但只适用于 4 的输入。我还有一个方法可以检查数字是否唯一。如果数字是唯一的,则boolean check(int[] array) {...}返回true

public static void thing(int num) {
        int[] arr = new int[num];
        for(int a = 1; a <= 4; a++) {
            arr[0] = a;
            for(int b = 0; b <= 4; b++) {
                arr[1] = b;
                for(int c = 0; c <= 4; c++) {
                    arr[2] = c;
                    for(int d = 0; d <= 4; d++) {
                        arr[3] = d;
                        if(check(arr)) {
                            System.out.println(arr[0] + "" + arr[1] + "" + arr[2] + "" + arr[3]); 
//here in the result it would print the array like in fibonacci I guess 
                        }   
                    }
                }
            }
        }
    }

所以,就目前而言,我需要控制每种情况下我需要的循环数,我需要的是通过输入设置的深度。正如我之前所说,输出形式为:

    1234
    1243
    ....
    ....
    4312
    4321

订单无关紧要,但它会运行。如果我错误地认为重复可以解决问题,请帮我找出什么可以解决。谢谢

标签: javafor-looprecursion

解决方案


正如 WJS 所提到的,您正在寻找置换算法。有许多不同的方法,但这是一种简单的方法:

class HeapAlgo {
    //Prints the array
    private void printArr(int a[], int n) {
        for (int i = 0; i < n; i++)
            System.out.print(a[i] + " ");
        System.out.println();
    }

    //Generating permutation using Heap Algorithm
    private void heapPermutation(int a[], int size, int n) {
        // if size becomes 1 then prints the obtained
        // permutation
        if (size == 1)
            printArr(a, n);

        for (int i = 0; i < size; i++) {
            heapPermutation(a, size - 1, n);

            // if size is odd, swap first and last
            // element
            if (size % 2 == 1) {
                int temp = a[0];
                a[0] = a[size - 1];
                a[size - 1] = temp;
            }

            // If size is even, swap ith and last
            // element
            else {
                int temp = a[i];
                a[i] = a[size - 1];
                a[size - 1] = temp;
            }
        }
    }

    // Driver code
    public static void main(String[] args) {
        HeapAlgo obj = new HeapAlgo();
        int[] a = {1, 2, 3};
        obj.heapPermutation(a, a.length, a.length);
    }
}

来源:堆排列


推荐阅读