首页 > 解决方案 > 适用于数组中数字组合的算法

问题描述

我有一个 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,

如果有人知道实现这一目标的好方法,将不胜感激。

标签: php

解决方案


在你的末尾,把你的$testvar 设置为 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),

推荐阅读