查找由数字字符数组生成的自然数量

时间:2017-12-03 08:16:21

标签: arrays ruby algorithm

美好的一天。

我有一组数字字符['9','0']['9','5','2','0','0','0']。需要查找长度等于源数组生成的数组大小的所有自然数的数量。例如['9','0']90,答案为1

如果数组没有0且数字重复数量可以通过阶乘计算:

['5','7','2'] => 3! => 6

['1','2','3','4','5','6','7'] => 7! => 5040

当出现零和重复时,它变得可变。

更多示例https://www.codewars.com/kumite/5a26eb9ab6486ae2680000fe?sel=5a26eb9ab6486ae2680000fe

谢谢

P.S。更好地找到公式,我知道如何通过循环解决这个问题

def g(a) answer = a.permutation(a.size) .select{|x| x.join.to_i.to_s.split("").size == a.size }.to_a.uniq.size answer end

1 个答案:

答案 0 :(得分:2)

与' 0'的唯一区别是你不能有领先' 0,即第一个数字不能为0。

给出N个数组的公式变为 (N - 零个数)*(N-1)!

当没有零时,它只是N!。

现在考虑复制的情况,假设有K' 1'在数组中。对于您在之前计算中的每个排列,您可以交换' 1'在K!换句,因此你需要用K!来划分你的结果。需要对具有重复项的每个数字进行此操作。当没有重复(0或1这样的数字)时,你除以0!还是1!因此,分裂不会改变价值。

示例案例:[0,0,1,1]

4位数,2个零,2个

(4-2)* 3! /(2!* 2!)= 3

可能的排列:1001,1010,1100