[leedcode 39] Combination Sum


Given a set of candidate numbers (C) and a target number (T), find all unique combinations inCwhere the candidate numbers sums toT.

Thesamerepeated number may be chosen fromCunlimited number of times.

Note:

  • All numbers (including target) will be positive integers.
  • Elements in a combination (a1,a2, … ,ak) must be in non-descending order. (ie,a1≤a2≤ … ≤ak).
  • The solution set must not contain duplicate combinations.

For example, given candidate set2,3,6,7and target7,
A solution set is:
[7]
[2, 2, 3]

public class Solution {
    List<Integer> seq;
    List<List<Integer>> res;
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        //类似全排列的变形,首先找到全排列,for循环加递归,终止条件是如果sum>target直接返回,如果sum=target则保存结果
        //注意for循环的开始条件,以及递归的变量,本题允许每个数使用多次。level代表递归开始的candidates下标
        //非常注意::在res中填值时,要重新new一个Integer,不能使用之前的,因为再操作seq会改变已经保存的值!
        Arrays.sort(candidates);
        seq=new ArrayList<Integer>();
        res=new ArrayList<List<Integer>>();
        find(candidates,target,0,0);

        return res;
    }
    public void find(int[] candidates,int target,int sum,int level){
        if(sum==target){
            res.add(new ArrayList<Integer>(seq));
            return;
        }
        if(sum>target){
            return;
        }
        for(int i=level;i<candidates.length;i++){
            seq.add(candidates[i]);
            sum+=candidates[i];
            find(candidates,target,sum,i);
            seq.remove(seq.size()-1);//
            sum-=candidates[i];
        }
        
    }
}

优质内容筛选与推荐>>
1、【Java】【29】post,get通用方法加强
2、Linux ftp服务器Proftp配置
3、sublime快捷方式和node.js
4、C# 时间戳与当前时间互相转换
5、(转)什么时候要抛出异常?


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号