php - 适用于数组中数字组合的算法
问题描述
我有一个 PHP 项目,我需要计算出不确定数量的数字(存储在数组中)(但通常不大于 5)的所有组合,并将它们存储在单独的数组中。
例如(不使用 PHP 语法):
numbers = (1 2 3)
1 + 2 = 3
1 + 3 = 4
2 + 3 = 5
1 + 2 + 3 = 6
这将创建一个数组:
3,4,5,6
第二个例子是:
numbers = 1 2 3 4
1 + 2 = 3
1 + 3 = 4
1 + 4 = 5
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
2 + 3 = 5
2 + 4 = 6
2 + 3 + 4 = 9
3 + 4 = 7
我尝试修改在以下位置找到的代码:https ://r.je/php-find-every-combination.html
但我似乎没有得到正确的输出,这是我没有推送到数组的简化代码:
$nums = array(1, 2, 3);
$num = count($nums);
$total = pow(2, $num);
$test = 0;
for ($i = 0; $i < $total; $i++) {
//For each combination check if each bit is set
for ($j = 0; $j < $num; $j++) {
//Is bit $j set in $i?
if (pow(2, $j) & $i) {
$test += $nums[$j];
}
}
echo $test . ',';
}
这输出:0,1,3,6,9,13,18,24,
如果有人知道实现这一目标的好方法,将不胜感激。
解决方案
在你的末尾,把你的$test
var 设置为 0
$nums = array(1, 2, 3);
$num = count($nums);
$total = pow(2, $num);
$test = 0;
for ($i = 0; $i < $total; $i++) {
//For each combination check if each bit is set
for ($j = 0; $j < $num; $j++) {
//Is bit $j set in $i?
if (pow(2, $j) & $i) {
$test += $nums[$j];
}
}
echo $test . ',';
$test = 0;
}
[编辑]
嗯...负0,结果如下:
0, 1(1), 2(2), 3(3), 3(1+2), 4(1+3), 5(2+3), 6(1+2+3),
推荐阅读
- c++ - 动态变量不起作用
- javascript - 如何使用打字稿和样式组件提升非反应静态?
- php - Laravel (v5.2.45) 播种器和双引号
- javascript - 当用户在 textarea 中点击“输入”时,如何在 MySql 中添加新行?
- android - 麻省理工学院应用程序发明者休息在平板电脑上运行时返回错误
- macos - 如何将终端样式更改回默认值?
- javascript - 在javascript中计数和重置
- javascript - 使用纯javascript将鼠标悬停在视频上时如何播放视频
- ruby - 向 Middleman 添加自定义 Markdown
- c# - 用一个词多次拆分字符串?