建筑组合表出经典秩序

时间:2013-12-01 07:08:38

标签: java algorithm combinations

我想构建一个组合表,例如4个5个样本(0 -4),但顺序不正确。该表应以0和1的组合开始;比0,1 2;比0,1,2,3;比0,1,2,3,4。当然桌子不应该重复。我需要一个算法来做到这一点,但直到现在我找不到任何算法。之后我必须编写一个java代码。最后,表格应如下所示:

0   0   0   1
0   0   1   0
0   1   0   0
1   0   0   0
0   0   1   1
0   1   0   1
0   1   1   0
1   0   1   0
1   1   0   0
0   1   1   1
....    ... ... ...
1   1   1   1
0   0   0   2
....    ... ... ...
2   0   0   0
... ... ... ...
0   0   1   2
....    ... ... ...
2   2   2   2
0   0   0   3
....    ... ... ...
3   0   0   0
0   0   1   3
....    ... ... ...
3   2   2   2
... ... ... ...
3   3   3   3
....    ....    ......  ...
4   4   4   4

1 个答案:

答案 0 :(得分:3)

你可以从0000开始,然后递增1(在2,3,4,5的基础上)直到你溢出。 E.g。

基地2:

0000 + 1 => 0001
0001 + 1 => 0010
0010 + 1 => 0011
...
1110 + 1 => 1111

基地3:

0000 + 1 => 0001
0001 + 1 => 0002
0002 + 1 => 0010
...
2221 + 1 => 2222

基础4和5类似。

如果你关心重复(例如0001在基数2和3中重复)那么你可以增加直到:对于基数2你至少有一个1,对于基数3你至少有一个2等等......


Java示例:

public static void main(String... args){
    int n = 4;

    // for base 1, 2, 3, 4, 5 (base 1 gives 0000)
    for(int base = 1; base < n + 2; base++)

        // for every combination: base^n
        for(int j = 0; j < Math.pow(base, n); j++)

            // if num contains a (base-1) digit, it's not a dup
            if(Integer.toString(j, base).contains(Integer.toString(base-1)))
                System.out.println(String.format("%04d",
                    Integer.parseInt(Integer.toString(j, base))));
}