首页 文章

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

提问于
浏览
-5

美好的一天 .

我有一个数字字符数组 ['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 .

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

More exampleshttps://www.codewars.com/kumite/5a26eb9ab6486ae2680000fe?sel=5a26eb9ab6486ae2680000fe

谢谢

附:更好地找到公式,我知道如何通过循环解决这个问题

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 回答

  • 2

    与'0'的唯一区别是你不能有前导'0',也就是说第一个数字不能为0 .

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

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

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

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

    4位数,2个零,2个

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

    可能的排列:1001,1010,1100

相关问题