PHP用回溯算法计算组合总和的思路和方法是什么
Admin 2022-05-24 群英技术资讯 1123 次浏览
这篇文章给大家分享的是PHP用回溯算法计算组合总和的思路和方法是什么。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用一次。
所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。
输入:
candidates = [10,1,2,7,6,1,5], target = 8,
所求解集为:
[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]]
直接参考回溯算法团灭排列/组合/子集问题。
class Solution {
/** * @param Integer[] $candidates * @param Integer $target * @return Integer[][] */
public $res = [];
function combinationSum2($candidates, $target) {
sort($candidates); // 排序
$this->dfs([], $candidates, $target, 0);
return $this->res;
}
function dfs($array, $candidates, $target, $start) {
if ($target < 0) return;
if ($target === 0) {
$this->res[] = $array;
return;
}
$count = count($candidates);
for ($i = $start; $i < $count; $i++) {
if ($i !== $start && $candidates[$i] === $candidates[$i - 1]) continue;
$array[] = $candidates[$i];
$this->dfs($array, $candidates, $target - $candidates[$i], $i + 1);//数字不能重复使用,需要+1
array_pop($array);
}}
实例扩展:
<?php
/*
* k = 2x + y + 1/2z
取值范围
* 0 <= x <= 1/2k
* 0 <= y <= k
* 0 <= z < = 2k
* x,y,z最大值 2k
*/
$daMi = 100;
$result = array();
function isOk($t,$daMi,$result)
{/*{{{*/
$total = 0;
$hash = array();
$hash[1] = 2;
$hash[2] = 1;
$hash[3] = 0.5;
for($i=1;$i<=$t;$i++)
{
$total += $result[$i] * $hash[$i];
}
if( $total <= $daMi)
{
return true;
}
return false;
}/*}}}*/
function backtrack($t,$daMi,$result)
{/*{{{*/
//递归出口
if($t > 3)
{
//输出最优解
if($daMi == (2 * $result[1] + $result[2] + 0.5 * $result[3]))
{
echo "最优解,大米:${daMi},大牛:$result[1],中牛: $result[2],小牛:$result[3]\n";
}
return;
}
for($i = 0;$i <= 2 * $daMi;$i++)
{
$result[$t] = $i;
//剪枝
if(isOk($t,$daMi,$result))
{
backtrack($t+1,$daMi,$result);
}
$result[$t] = 0;
}
}/*}}}*/
backtrack(1,$daMi,$result);
?>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
卸载swoole扩展的方法:1、在php.ini中删除extension=swoole.so。2、切换到PHP安装目录下的bin,然后使用“./pecl uninstall swoole”命令卸载swoole扩展。
一些朋友有遇到laravel访问public目录报错的情况,不知道怎样解决?其实解决这个问题并不难,接下来我们就来看laravel访问public报错的原因及解决方法,需要的朋友可以了解看看。
在本部分,你将了解 PHP5 的目录函数:Directory 函数。有不少朋友对此感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
这篇文章主要介绍了PHP call_user_func和call_user_func_array函数的简单理解与应用,结合实例形式分析了PHP call_user_func和call_user_func_array函数的基本功能、用法及操作注意事项,需要的朋友可以参考下
php算术运算符的理解:1、乘法运算,使用 * 号,编写语法跟加法一致;2、除法运算,使用 / 号,编写语法跟加法一致;3、取模运算,使用 % 号,取模运算是取余数运算,a除以b,则是取剩下的余数,如果整除,余数为0。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008