39. 组合总和

地址:https://leetcode-cn.com/problems/combination-sum/

<?php
/**
 * Created by PhpStorm.
 * User: huahua
 * Date: 2020/10/22
 * Time: 上午11:47
39. 组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

所有数字(包括 target)都是正整数。
解集不能包含重复的组合。
示例 1:

输入:candidates = [2,3,6,7], target = 7,
所求解集为:
[
[7],
[2,2,3]
]
示例 2:

输入:candidates = [2,3,5], target = 8,
所求解集为:
[
[2,2,2,2],
[2,3,3],
[3,5]
]


提示:

1 <= candidates.length <= 30
1 <= candidates[i] <= 200
candidate 中的每个元素都是独一无二的。
1 <= target <= 500

 */
class Solution {

    /**
     * @param Integer[] $candidates
     * @param Integer $target
     * @return Integer[][]
     */
    public $res = [];
    function combinationSum($candidates, $target) {
        if ($target <= 0) return [];
        sort($candidates);
        $this->cs($candidates,$target,[],0);
        return $this->res;
    }

    public function cs($nums,$target,$list,$start){
        if ($target <0 ) return ;
        if ($target == 0){
            $this->res[] = $list;
            return;
        }
        for ($i = $start;$i <count($nums);$i++){
            if ($target - $nums[$i] <0)break;
            $list[] = $nums[$i];
            $this->cs($nums,$target - $nums[$i],$list,$i);
            array_pop($list);
        }
    }
}

 

posted @ 2020-10-22 11:48  花花妹子。  阅读(70)  评论(0编辑  收藏  举报