我知道有很多类似的问题,我已经阅读了几个小时。但似乎没有一个符合我的要求。
我的问题:
给定 n 个 int 数组,每个数组都有以下形式
array_i[] = {0, 1,...,count_i-1}, i = 0,1,...,n-1.
我们在每个数组中选择一个数进行组合,这样的组合数为
count_0*count_1*...*count_{n-1}
例如
array_0 = {0,1}
array_1 = {0,1,2}
array_2 = {0,1}
2*3*2 = 12 组合是
0| 0 0 0
1| 0 0 1
2| 0 1 0
3| 0 1 1
4| 0 2 0
5| 0 2 1
6| 1 0 0
7| 1 0 1
8| 1 1 0
9| 1 1 1
10| 1 2 0
11| 1 2 1
我想得到第 i 个组合(例如第 9 个组合是{1,1,1}
)并有效地得到它。我已经尝试过 base-n 转换的想法,例如Permutation for numbers in C。但它效率不高,因为 base 必须是最大的count_i
,这可能是不必要的。我也考虑过为每个位使用不同的基数的想法,但是要正确地建立关系是很棘手的。
任何建议都非常受欢迎。