首页 > 其他 > 详细

Combination Sum

时间:2015-06-11 02:08:00      阅读:233      评论:0      收藏:0      [点我收藏+]

Given a set of candidate numbers (C) and a target number (T), find all unique combinations in?C?where the candidate numbers sums to?T.

The?same?repeated number may be chosen from?C?unlimited 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 set?2,3,6,7?and target?7,?
A solution set is:?
[7]?
[2, 2, 3]?

?

import java.util.ArrayList;
import java.util.Arrays;

public class Solution {
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        Arrays.sort(candidates);
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        List<Integer> l = new ArrayList<Integer>();
        list.add(l);
        return solve(list, candidates, target, 0);
    }

	private List<List<Integer>> solve(List<List<Integer>> list,
			int[] candidates, int target, int pos) {
		List<List<Integer>> res = new ArrayList<List<Integer>>();
		if (pos == candidates.length) {
			if (target == 0) {
				return list;
			}
			return res;
		}
		for (int i = 0; i*candidates[pos] <= target; i++) {
			List<List<Integer>> newlist = new ArrayList<List<Integer>>();
			for (List<Integer> l : list) {
				List<Integer> nl = new ArrayList<Integer>(l);
				for (int j = 1; j <= i; j++) {
					nl.add(candidates[pos]);
				}
				newlist.add(nl);
			}
			res.addAll(solve(newlist, candidates, target-i*candidates[pos], pos+1));
		}
		return res;
	}
}

?

Combination Sum

原文:http://hcx2013.iteye.com/blog/2218642

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!