返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php回溯算法计算组合总和的实例代码
  • 114
分享到

php回溯算法计算组合总和的实例代码

2024-04-02 19:04:59 114人浏览 八月长安
摘要

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组

给定一个数组 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 {
    
    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

$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);
?>

到此这篇关于php回溯算法计算组合总和的实例代码的文章就介绍到这了,更多相关php回溯算法计算组合总和的方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: php回溯算法计算组合总和的实例代码

本文链接: https://lsjlt.com/news/130427.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php回溯算法计算组合总和的实例代码
    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组...
    99+
    2024-04-02
  • php回溯算法计算组合总和的方法
    本文小编为大家详细介绍“php回溯算法计算组合总和的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“php回溯算法计算组合总和的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • 如何用php回溯算法计算组合总和
    本篇内容主要讲解“如何用php回溯算法计算组合总和”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用php回溯算法计算组合总和”吧!给定一个数组 candidates 和一个目标数 targe...
    99+
    2023-06-20
  • PHP怎么使用回溯算法计算组合总和
    本篇内容介绍了“PHP怎么使用回溯算法计算组合总和”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!给定一个数组candidates和一个目标数...
    99+
    2023-06-20
  • php中怎么利用回溯算法计算组合总和
    php中怎么利用回溯算法计算组合总和,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。给定一个数组 candidates 和一个目标数 target ,找出 candidate...
    99+
    2023-06-20
  • C++回溯算法中组合的相关问题分析
    目录一、组合二、组合总和III与组合总和1.组合总和III2.组合总和3.组合总和II三、电话号码的字母组合 回溯算法模板 void backtracking(参数) { ...
    99+
    2023-03-15
    C++回溯算法组合 C++回溯算法
  • C++回溯算法中组合的相关问题怎么解决
    这篇文章主要讲解了“C++回溯算法中组合的相关问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++回溯算法中组合的相关问题怎么解决”吧!回溯算法模板void backtracki...
    99+
    2023-07-05
  • js回溯法计算最佳旅行线路的示例分析
    这篇文章主要为大家展示了“js回溯法计算最佳旅行线路的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js回溯法计算最佳旅行线路的示例分析”这篇文章吧。回...
    99+
    2024-04-02
  • PHP实现LRU算法的示例代码
    本篇文章主要给大家介绍了PHP的相关知识,LRU是Least Recently Used 近期最少使用算法, 内存管理的一种页面置换算法,下面将详解LRU算法的原理以及实现,下面一起来看一下,希望对大家有帮助。(推荐教程:PHP视频教程)原...
    99+
    2022-08-08
    php
  • php计算汉明距离总和的实例讲解
    两个整数的汉明距离指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中,任意两个数之间汉明距离的总和。 实例 输入: 4, 14, 2 输出: 6 解释:在二进制表示中,4...
    99+
    2024-04-02
  • PHP算法题实例代码分析
    本篇内容主要讲解“PHP算法题实例代码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP算法题实例代码分析”吧!题目给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 ...
    99+
    2023-07-05
  • Python除法运算和幂运算代码实例
    “//”运算除法运算符是“/”,这个人人皆知道,但是这个二元运算符“/”求出来的结果都是取决于操作数本身的20 / 3620 / 3.06.66666666666666720.0 / 36.66666666666666720.0 / 3...
    99+
    2023-01-31
    除法 实例 代码
  • PHP中计算数组个数总和的技巧
    PHP中计算数组个数总和的技巧 在PHP中,计算数组个数总和是一个常见的操作。有时候我们需要统计数组中元素的个数,然后将它们相加得到总和。在本文中,我们将介绍几种计算数组个数总和的技巧...
    99+
    2024-03-13
    计算 php 数组
  • Python实现计算AUC的示例代码
    目录为什么这样一个指标可以衡量分类效果auc理解AUC计算方法一方法二实现及验证AUC(Area under curve)是机器学习常用的二分类评测手段,直接含义是ROC曲线下的面积...
    99+
    2024-04-02
  • php计算汉明距离总和的示例分析
    这篇文章主要为大家展示了“php计算汉明距离总和的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php计算汉明距离总和的示例分析”这篇文章吧。两个整数的汉明距离指的是这两个数字的二进制数...
    99+
    2023-06-20
  • Django+Bootstrap实现计算器的示例代码
    目录准备工作导入Bootstrap前端框架编写前端内容编写视图函数准备工作 创建一个应用 添加应用到配置 创建一个html 编写视图函数 from django.short...
    99+
    2024-04-02
  • Python实现各种排序算法的代码示例总结
    在Python实践中,我们往往遇到排序问题,比如在对搜索结果打分的排序(没有排序就没有Google等搜索引擎的存在),当然,这样的例子数不胜数。《数据结构》也会花大量篇幅讲解排序。之前一段时间,由于需要,我...
    99+
    2022-06-04
    示例 算法 代码
  • Java实现AES算法的实例代码
      使用AES算法可用于对数据进行加密码与解密,使用的时候需要注意两点:1)被加密的串越长,加密后的字符串越长,注意数据库字段的设计;2)Linux与Windows环境中可能会出现由...
    99+
    2024-04-02
  • PHP实现常见排序算法的示例代码
    目录1、冒泡排序2、选择排序3、快速排序4、插入排序补充1、冒泡排序 两两相比,每循环一轮就不用再比较最后一个元素了,因为最后一个元素已经是最大或者最小。 function maop...
    99+
    2024-04-02
  • C++实例分析组合数的计算与排列组合的产生
    目录组合数的计算使用加法递推—O(n^2)使用乘法递推—O(n)排列和组合的产生(无重集元素)全排列一般组合全组合由上一排列产生下一排列由上一组合产生下一组合...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作