首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成Z给定数集N-长度数的唯一组合?

如何生成Z给定数集N-长度数的唯一组合?
EN

Stack Overflow用户
提问于 2013-08-29 01:06:22
回答 2查看 5K关注 0票数 1

假设输入是

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)); } }

仍然有一些组合缺失(看起来上面是低效的),你能建议我缺少什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-29 01:10:14

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

代码语言:javascript
复制
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]
            }
        }
     }
}

这将使数字是唯一的,不管顺序如何,我认为正确的术语是置换(这是置换)与组合。

票数 5
EN

Stack Overflow用户

发布于 2013-08-29 01:58:28

我为这个问题编写了一个递归算法,并且不确定它在java中是语法的,所以把它当作伪代码。

代码语言:javascript
复制
perm(int input[],int output[],int len,int num,int j,int k)
{
    int i;
    if(k==SUM) { //SUM = 4
        //print the numbers in output[0...SUM-1]
        //return
    }
    for(i=j;i<=len-num;i++) {
        output[k] =input[i];
        perm(input,output,len,num-1,i+1,k+1);
    }
}

一开始,

代码语言:javascript
复制
int input[]={1,2,3,4,5,6,7};
int output[4];
perm(input,output,7,4,0,0);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18500747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档