我想构建一个组合表,例如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
答案 0 :(得分:3)
你可以从0000
开始,然后递增1(在2,3,4,5的基础上)直到你溢出。 E.g。
0000 + 1 => 0001
0001 + 1 => 0010
0010 + 1 => 0011
...
1110 + 1 => 1111
0000 + 1 => 0001
0001 + 1 => 0002
0002 + 1 => 0010
...
2221 + 1 => 2222
基础4和5类似。
如果你关心重复(例如0001
在基数2和3中重复)那么你可以增加直到:对于基数2你至少有一个1,对于基数3你至少有一个2
等等......
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))));
}