php - 检查一组数字中的数字 n 是否等于其子集的总和

标签 php algorithm

我有一个数组:

$permissionVals = array (1,2,4,8,16,32);

和一个变量

$effectivePermission = 13;

我需要以优化的方式检查此变量是否等于给定数字数组的任何子集的总和。

子集和在这里似乎对我不起作用。 谢谢

最佳答案

假设 $permissionVals 总是包含 2 的幂,您可以使用位比较:

$permissionVals = array(1,2,4,8,16,32);
$target = 13;
$res = array();

foreach ($permissionVals as $val) {
    if ($target & $val) $res[] = $val;
}

if (array_sum($res) == $target)
    print_r($res);
else 
    echo 'the message you want';

当达到总和时将停止 foreach 循环的变体。 (如果 $permissionVals 很大,则很有用):

$sum = 0;
$message = 'the message you want';

foreach ($permissionVals as $val) {
    if ($target & $val) {
        $res[] = $val;
        $sum += $val;
    }
    if ($sum == $target) {
    $message = '';
    print_r($res);
    break;
    }
}

echo $message;

关于php - 检查一组数字中的数字 n 是否等于其子集的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22914772/

相关文章:

php - PHP 的 foreach 如何与 MongoDB Cursor 配合使用?

php - 音频到文本API?

php - 使用 PHP 和 $_GET ['' 在 <a href> 中传递多个变量]

sql - 如何在sql中查找几乎相似的记录?

php - 测量 PHP 脚本的时间 - 使用 $_SERVER ['REQUEST_TIME' ]

php - 如何使用 Laravel Passport (5.3) 记录身份验证尝试

java - O(n!)的示例?

performance - 争论我的算法是正确的并且在范围内

algorithm - 是否可以从 Excel 中的多行中获取平均值?

algorithm - 是否有解决组合的通用模式?