Java组合算法

这是一个简单的问题,大一刚学编程的时候做的笔记。

打印出从1、2、3……n中取出r个数的不同组合(n>=r>=1)

例如n=3,r=2,输出:

1,2

2,3

下面是实现的代码:

public class Combination {

    public static void combine(int[] list, int k, int l, int r, int n) {
        if (k + l > n + 1)
            return;
        if (l == 0) {
            for (int i = 0; i < r; i++)
                System.out.print(list[i] + " ");
            System.out.println();
            return;
        }
        list[r - l] = k;
        combine(list, k + 1, l - 1, r, n);
        if (k + l <= n)
            combine(list, k + 1, l, r, n);
    }

    public static void main(String[] args) throws NumberFormatException{
        int n = 5;
        int r = 3;
        int[] list = new int[r];
        int k = 1;
        int l = r;
        Combination.combine(list, k, l, r, n);
    }
}

当时真的是不知道变量命名规范啊,都用一个字母来表示……而且没有写一个注释。等我有空再来研究一下这个程序,再做解释。

原文地址:https://www.cnblogs.com/shuada/p/3384865.html