我如何按职位生成组合

时间:2019-06-24 03:28:27

标签: algorithm math

一个示例我有一组数字[1,2,3],位置4和我想不重复地生成它。

1: [1,1,1]
2: [2,1,1]
3: [1,2,1]
4: [.....]

1 个答案:

答案 0 :(得分:1)

看看您的上一主题,我建议您要生成N^M个N位数(长度为M)与重复的组合。请注意,每个组合都对应于0..N^M-1范围内的整数值,因此我们可以生成此类值并将其重新呈现在N元数字系统中。 Python代码:

def GenCombs(N, M):
    lst = [0]*M
    for v in range(N**M):
        t = v
        for i in range(M):
            d = t % N
            lst[M - i - 1] = d + 1
            t = t // N
        print(lst)

要生成唯一的第K个组合(从零开始编号),请摘录:

def GenComb(N, M, K):
    lst = [0]*M
    for i in range(M):
        d = K % N
        lst[M - i - 1] = d + 1
        K = K // N
    return(lst)

print(GenComb(3, 3, 11))  

>>>  [2, 1, 3]