给定一个正整数 N 作为输入,我如何找到它们子集中数字的乘积?

Given a positive integer N as input, how do I find the product of the numbers in their subsets?

如果 N=405,我如何生成它的所有子集,然后找到每个子集的数字的乘积?就像在这种情况下,集合将是 {0,4,5,40,05,45,405} 他们的产品会产生一组 {0,4,5,0,0,20,0}?

编辑:它是一组非空子序列。

检查此 site 它将为您提供获取给定集合的幂集的逻辑。 获得幂集元素后,将集合中的每个元素相乘以获得所需的乘积。

嗯,有一个非常简单和简单的递归解决方案来检索所有子集。

你从你的集合中去掉一个元素,然后找到这个新的、更小的集合的所有子集。然后复制结果并将之前删除的元素添加到副本中。将结果加在一起就完成了。例如:

{1,2,3}

Take out 1 and find all subsets of {2,3} giving you:
{{}, {2}, {3}, {2,3}}

Now copy this to give you
A = {{}, {2}, {3}, {2,3}}
B = {{}, {2}, {3}, {2,3}}

Now add 1 to each set in A, giving you
{{1}, {1,2}, {1,3}, {1,2,3}}

combine it with B
{{1}, {1,2}, {1,3}, {1,2,3}, {}, {2}, {3}, {2,3}}

这是一些代码:

function subsets(aSet) {
    if (aSet.isEmpty()) {
        return [theEmptySet]
    }

    let lastElement = aSet.getLast()
    let aSmallerSet = aSet.removeLast()

    let subsetsOfSmallerSet = subsets(aSmallerSet)
    let subsetsContainingLastElement = subsetsOfSmallerSet.map(set => set.insert(lastElement))

    return subsetsOfSmallerSet.concat(subsetsContainingLastElement)
}

我假设您的意思是获取给定数字的所有数字子集。所以,假设你已经拆分了数字并将它们解析回数字,那么你可以只使用 reduce 来获得产品。

let digits = //... an array such as [4,0,5]
let subsetsOfDigits = subsets(digits)
subsetsOfDigits.map(subset => subset.reduce((a,b) => a * b))

啊,但是这里的空集有问题,因为你没有传递初始值来减少。但是,您的示例中似乎忽略了空集,因此您可以将其过滤掉,然后,这段代码就可以工作了。