Combination Sum

来源:互联网 发布:windows系统资源监控 编辑:程序博客网 时间:2024/04/30 22:00
public class Solution {    public ArrayList<Integer> l;    public ArrayList<ArrayList<Integer>> l1;    public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) {        // Start typing your Java solution below        // DO NOT write main() function        l = new ArrayList<Integer>();        l1 = new ArrayList<ArrayList<Integer>>();        Arrays.sort(candidates);        search(candidates,target,0,l);        return l1;    }    private void search(int[] num,int target,int lev,ArrayList<Integer> l){        //System.out.println("target: "+target+"  lev:"+lev);        if(target == 0)l1.add(new ArrayList<Integer>(l));        if(target < num[lev])return;        if(lev==num.length-1){            if(target%num[lev]==0){                for(int i = 0;i<target/num[lev];i++)                    l.add(num[lev]);                l1.add(new ArrayList<Integer>(l));                for(int i = 0;i < target/num[lev];i++){            l.remove(l.size()-1);            }            }        }        else{        int count = target/num[lev];        for(int i = 0;i <= count;i++){        search(num,target-i*num[lev],lev+1,l);        l.add(num[lev]);        }        for(int i = 0;i <= count;i++){        l.remove(l.size()-1);        }        }    }    public static void main(String[] args){    int[] a = new int[4];    a[0]=2;a[1]=3;a[2]=6;a[3]=7;    Solution s = new Solution();    System.out.println(s.combinationSum(a,7));    }}






自己写这个太丑了,还是找个标准的看

public class Solution {    public ArrayList<Integer> cur;    public ArrayList<ArrayList<Integer>> ret;    public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) {        // Start typing your Java solution below        // DO NOT write main() function        ret = new ArrayList<ArrayList<Integer>>();        cur = new ArrayList<Integer>();        Arrays.sort(candidates);        find(candidates,0,cur,target);        return ret;    }    private void find(int[] candidates,int index,ArrayList<Integer> cur,int target){        if(target == 0)            ret.add(new ArrayList<Integer>(cur));        else{            for(int i = index;i < candidates.length;i++){                if(target >= candidates[i]){                    cur.add(candidates[i]);                    find(candidates,i,cur,target-candidates[i]);                    cur.remove(cur.size()-1);                }            }        }    }}


原创粉丝点击