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 编程技术、程序设计以及源码范例:PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持 ...