给定一个正整数 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))
啊,但是这里的空集有问题,因为你没有传递初始值来减少。但是,您的示例中似乎忽略了空集,因此您可以将其过滤掉,然后,这段代码就可以工作了。
如果 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))
啊,但是这里的空集有问题,因为你没有传递初始值来减少。但是,您的示例中似乎忽略了空集,因此您可以将其过滤掉,然后,这段代码就可以工作了。