给定一组数字,如何为Z生成N长度数字的唯一组合

Vam*_*msi 1 java algorithm combinations permutation

可以说输入是

int []输入= [1、2、3、4、5、6、7];

我想要一个4位数字的唯一组合,而与下面的顺序无关-

1234, 1235, 1236, 1237, 1245, 1246, 1247 etc.,

不需要的-

4321、5321、6321、0000、0111等,//无论我要唯一的顺序

等等。,

尝试了以下方法-

    for (int i = 0; i < E-3; i++) {
        System.out.println(i+"::"+(i+1)+"::"+(i + 2)+"::"+(i+3));                     
    }

    for (int i = 0; i < E-3; i++) {

        for (int j = i + 4; j < E; j++) {

            System.out.println(i+"::"+(i+1)+"::"+(i + 2)+"::"+j);
            System.out.println(i+"::"+(i+1)+"::"+j+"::"+(i + 3));
            System.out.println(i+"::"+(j)+"::"+(i+2)+"::"+(i + 3));
            System.out.println(j+"::"+(i+1)+"::"+(i+2)+"::"+(i + 3));

        }
    }
Run Code Online (Sandbox Code Playgroud)

仍然缺少一些组合(看起来上面的方法效率低下),您能建议我所缺少的吗?

aar*_*man 5

只要数组的元素是唯一的,就可以这样做:

int len = input.length();
for (int i = 0;i<len;i++) {
    for (int j = i+1;j<len;j++) {
        for (int k = j+1;k<len;k++) {
            for (int l = k+1;l<len;l++) {
                //print the numbers in order
                //digits are: input[i] input[j] input[k] input[l]
            }
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

这将使数字无论顺序如何都是唯一的,我认为正确的术语是排列(这是排列)与组合。