所有子集的和

来源:互联网 发布:arcgis转移矩阵 编辑:程序博客网 时间:2024/04/28 06:33

Lintcode 730

已知

给一整数 n, 我们需要求前n个自然数形成的集合的所有可能子集中所有元素的和。

示例

给出 n = 2, 返回 6可能的子集为 {{1}, {2}, {1, 2}}. 子集的元素和为 1 + 2 + 1 + 2 = 6给出 n = 3, 返回 24可能的子集为 {{1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}子集的和为:1 + 2 + 3 + (1 + 2) + (1 + 3) + (2 + 3) + (1 + 2 + 3) = 24

思路

其实这更像是一个数学问题,而不是代码问题。以4为例子,取一个数,则取1的可能性为1种,取两个数字,则取1的可能性为3种,取三个数字,则取1的可能性为3种,取四个数字,可能性为1种,则1总共计算了 1+3+3+18次, 其他三个数字也是8次。所以,结合上面两个示例,很容易可以推的:当已知n的值时,我们会取里面的数字2^(n-1)次每一次的值为1+2+3+...+n

代码:

因为代码本身只有一句,这里就不贴了,不过提醒读者注意,当值的计算过程中有可能超过Integer.MAX_VALUE时,比如说X * Y / 2这样的计算式,必须把乘放最后计算,否则超过界限就会变成负数,从而造成结果的出错

结语:

谢谢您的观看,希望对您有所帮助❥(ゝω・✿ฺ)
原创粉丝点击